Return 0 when read/write ptrs are incorrect am: 57c8b9df52

Original change: https://android-review.googlesource.com/c/platform/system/libfmq/+/2918987

Change-Id: I2b15da5f106ab9e05cdca3a81e3b40269ee04cb0
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/include/fmq/MessageQueueBase.h b/include/fmq/MessageQueueBase.h
index 8144937..ee80a45 100644
--- a/include/fmq/MessageQueueBase.h
+++ b/include/fmq/MessageQueueBase.h
@@ -1047,6 +1047,12 @@
 
 template <template <typename, MQFlavor> typename MQDescriptorType, typename T, MQFlavor flavor>
 size_t MessageQueueBase<MQDescriptorType, T, flavor>::availableToWriteBytes() const {
+    if (mDesc->getSize() < availableToReadBytes()) {
+        hardware::details::logError(
+                "The write or read pointer has become corrupted. Reading from the queue is no "
+                "longer possible.");
+        return 0;
+    }
     return mDesc->getSize() - availableToReadBytes();
 }
 
@@ -1135,6 +1141,12 @@
      * hence requires a memory_order_acquired load for both mReadPtr and
      * mWritePtr.
      */
+    if (mWritePtr->load(std::memory_order_acquire) < mReadPtr->load(std::memory_order_acquire)) {
+        hardware::details::logError(
+                "The write or read pointer has become corrupted. Reading from the queue is no "
+                "longer possible.");
+        return 0;
+    }
     return mWritePtr->load(std::memory_order_acquire) - mReadPtr->load(std::memory_order_acquire);
 }