BnGraphicBufferProducer: Add null fence checks

Add null fence checks to BnGraphicBufferProducer::onTransact
DEQUEUE_BUFFER and GET_LAST_QUEUED_BUFFER cases. If we do find a null
fence, set to Fence::NO_FENCE and log an error.
This will avoid a crash. There still may be a synchronization issue
with NO_FENCE, but a glitch is favorable to a crash and the extra error
logging will help isolate any null fence issues going forward.

Fix: 124395884
Test: builds
Change-Id: I458aadf183e638dea04a9457cc7df5579a7e8046
diff --git a/libs/gui/IGraphicBufferProducer.cpp b/libs/gui/IGraphicBufferProducer.cpp
index 9dde15d..14eca43 100644
--- a/libs/gui/IGraphicBufferProducer.cpp
+++ b/libs/gui/IGraphicBufferProducer.cpp
@@ -781,6 +781,10 @@
             int result = dequeueBuffer(&buf, &fence, width, height, format, usage, &bufferAge,
                                        getTimestamps ? &frameTimestamps : nullptr);
 
+            if (fence == nullptr) {
+                ALOGE("dequeueBuffer returned a NULL fence, setting to Fence::NO_FENCE");
+                fence = Fence::NO_FENCE;
+            }
             reply->writeInt32(buf);
             reply->write(*fence);
             reply->writeUint64(bufferAge);
@@ -963,6 +967,10 @@
                 ALOGE("getLastQueuedBuffer failed to write buffer: %d", result);
                 return result;
             }
+            if (fence == nullptr) {
+                ALOGE("getLastQueuedBuffer returned a NULL fence, setting to Fence::NO_FENCE");
+                fence = Fence::NO_FENCE;
+            }
             result = reply->write(*fence);
             if (result != NO_ERROR) {
                 ALOGE("getLastQueuedBuffer failed to write fence: %d", result);