Zero-init HIDL core types (all)

hidl_pointer - already zero initialized
hidl_string - now memset to 0
hidl_array - has no pad to initialize, default initialize since we
    now expect structs to be default initialized to sane values.
hidl_vec - now memset to 0
hidl_memory - has three aligned(8) items which are always set
hidl_version - unused, but has two uint16_t entries

Zero-init HIDL core types (hidl_handle).
Has 7 padded bits at the end.

Since they are passed across processes.

Bug: 131356202
Test: print out values

Change-Id: I3979232879bb437d17d3a6f6013b53b2951a2138
Merged-In: I3979232879bb437d17d3a6f6013b53b2951a2138
diff --git a/base/HidlSupport.cpp b/base/HidlSupport.cpp
index 8223599..f9a23e8 100644
--- a/base/HidlSupport.cpp
+++ b/base/HidlSupport.cpp
@@ -36,27 +36,28 @@
 }  // namespace details
 
 hidl_handle::hidl_handle() {
-    mHandle = nullptr;
-    mOwnsHandle = false;
+    memset(this, 0, sizeof(*this));
+    // mHandle = nullptr;
+    // mOwnsHandle = false;
 }
 
 hidl_handle::~hidl_handle() {
     freeHandle();
 }
 
-hidl_handle::hidl_handle(const native_handle_t *handle) {
+hidl_handle::hidl_handle(const native_handle_t* handle) : hidl_handle() {
     mHandle = handle;
     mOwnsHandle = false;
 }
 
 // copy constructor.
-hidl_handle::hidl_handle(const hidl_handle &other) {
+hidl_handle::hidl_handle(const hidl_handle& other) : hidl_handle() {
     mOwnsHandle = false;
     *this = other;
 }
 
 // move constructor.
-hidl_handle::hidl_handle(hidl_handle &&other) {
+hidl_handle::hidl_handle(hidl_handle&& other) : hidl_handle() {
     mOwnsHandle = false;
     *this = std::move(other);
 }
@@ -137,10 +138,11 @@
 
 static const char *const kEmptyString = "";
 
-hidl_string::hidl_string()
-    : mBuffer(kEmptyString),
-      mSize(0),
-      mOwnsBuffer(false) {
+hidl_string::hidl_string() {
+    memset(this, 0, sizeof(*this));
+    // mSize is zero
+    // mOwnsBuffer is false
+    mBuffer = kEmptyString;
 }
 
 hidl_string::~hidl_string() {