Fix potential memory leak.
In the onTransact DECRYPT case, the allocated subSamples
are not freed when we encounter an error. Use unique_ptr
to manage memory instead.
Test: Play Movies & TV, Netflix
Test: Gts
bug: 73628269
Change-Id: I36b7deeff0380ee3be31ad5f93a5598cfe02e381
diff --git a/drm/libmediadrm/ICrypto.cpp b/drm/libmediadrm/ICrypto.cpp
index 40aeb9f..73ecda1 100644
--- a/drm/libmediadrm/ICrypto.cpp
+++ b/drm/libmediadrm/ICrypto.cpp
@@ -341,10 +341,10 @@
return OK;
}
- CryptoPlugin::SubSample *subSamples =
- new CryptoPlugin::SubSample[numSubSamples];
+ std::unique_ptr<CryptoPlugin::SubSample[]> subSamples =
+ std::make_unique<CryptoPlugin::SubSample[]>(numSubSamples);
- data.read(subSamples,
+ data.read(subSamples.get(),
sizeof(CryptoPlugin::SubSample) * numSubSamples);
DestinationBuffer destination;
@@ -402,7 +402,7 @@
result = -EINVAL;
} else {
result = decrypt(key, iv, mode, pattern, source, offset,
- subSamples, numSubSamples, destination, &errorDetailMsg);
+ subSamples.get(), numSubSamples, destination, &errorDetailMsg);
}
reply->writeInt32(result);
@@ -421,9 +421,7 @@
}
}
- delete[] subSamples;
- subSamples = NULL;
-
+ subSamples.reset();
return OK;
}