CryptoHalAidl: handle null arguments

Bug: 206804036
Test: atest android.media.drm.cts.MediaDrmClearkeyTest
Change-Id: Iec242d6765d2a81565a9d3e270ee0a4bd6359e87
diff --git a/drm/libmediadrm/CryptoHalAidl.cpp b/drm/libmediadrm/CryptoHalAidl.cpp
index a688728..03782ef 100644
--- a/drm/libmediadrm/CryptoHalAidl.cpp
+++ b/drm/libmediadrm/CryptoHalAidl.cpp
@@ -109,7 +109,12 @@
     // skip negative convert check as count of enum elements are 2
     aidldb.type = static_cast<BufferType>((int32_t)buffer.type);
     aidldb.nonsecureMemory = hidlSharedBufferToAidlSharedBuffer(buffer.nonsecureMemory);
-    aidldb.secureMemory = ::android::makeToAidl(buffer.secureMemory.getNativeHandle());
+    auto handle = buffer.secureMemory.getNativeHandle();
+    if (handle) {
+        aidldb.secureMemory = ::android::makeToAidl(handle);
+    } else {
+        aidldb.secureMemory = {.fds = {}, .ints = {}};
+    }
     return aidldb;
 }
 
@@ -130,6 +135,13 @@
     return String8(string.c_str());
 }
 
+static std::vector<uint8_t> toStdVec(const uint8_t* ptr, size_t n) {
+    if (!ptr) {
+        return std::vector<uint8_t>();
+    }
+    return std::vector<uint8_t>(ptr, ptr + n);
+}
+
 // -------Hidl interface related end--------------
 
 CryptoHalAidl::CryptoHalAidl()
@@ -335,8 +347,8 @@
     status_t err = UNKNOWN_ERROR;
     mLock.unlock();
 
-    std::vector<uint8_t> keyIdAidl = std::vector<uint8_t>(keyId, keyId + 16);
-    std::vector<uint8_t> ivAidl = std::vector<uint8_t>(iv, iv + 16);
+    std::vector<uint8_t> keyIdAidl(toStdVec(keyId, 16));
+    std::vector<uint8_t> ivAidl(toStdVec(iv, 16));
     DecryptResult result;
     err = mPlugin->decrypt(secure, keyIdAidl, ivAidl, aMode, aPattern, stdSubSamples,
                            hidlSharedBufferToAidlSharedBuffer(hSource), offset,