libbinder: Status - allow null errors

Java Throwable getMessage can (and will!) return null, and when this
happens, we don't get any error information in the native world. So, for
instance, Java ServiceException won't be reported to native code.

This is technically a backwards incompatible change, and we'll have to
watch for breakages, but losing service specific exceptions in such a
clearly egregious way is not acceptable. :)

Fixes: 178861468
Test: boot & aidl_integration_test
Change-Id: If70d8fb445078c2989c4288c01055bb7191a012f
diff --git a/libs/binder/Status.cpp b/libs/binder/Status.cpp
index b5a078c..a44c578 100644
--- a/libs/binder/Status.cpp
+++ b/libs/binder/Status.cpp
@@ -130,13 +130,13 @@
     }
 
     // The remote threw an exception.  Get the message back.
-    String16 message;
+    std::optional<String16> message;
     status = parcel.readString16(&message);
     if (status != OK) {
         setFromStatusT(status);
         return status;
     }
-    mMessage = String8(message);
+    mMessage = String8(message.value_or(String16()));
 
     // Skip over the remote stack trace data
     int32_t remote_stack_trace_header_size;