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,