Fix getSecureStop returns zero opaque data intermittently.

Merge from http://go/wvgerrit/69603

In getSecureStop, the life of cdmStop will expire when
leaving the if (isCmdResponseTypeSuccess()) scope.
Since setToExternal() which is called by toHidlVec()
only performs a pointer assignment, the content of cdmStop
is lost and secureStop.opaqueData will have all zeros.

Test: netflix streaming and offline playback

Test: Play Movies & TV

Test: GTS test
  -m GtsMediaTestCases --test com.google.android.media.gts.MediaDrmTest#testWidevineApi28

Test: GTS test
  -m GtsMediaTestCases

bug: 120624463
Change-Id: I8da473d5fd06d091980eade4b7216856ef097e04
This commit is contained in:
Edwin Wong
2019-01-04 14:57:10 -08:00
parent d44a8016ad
commit f7659c72dd

View File

@@ -672,7 +672,9 @@ Return<void> WVDrmPlugin::getSecureStop(
_hidl_cb(Status::BAD_VALUE, SecureStop());
return Void();
}
const std::vector<uint8_t> id = toVector(secureStopId);
std::vector<uint8_t> cdmStopVec;
SecureStop secureStop;
CdmIdentifier identifier;
@@ -688,7 +690,6 @@ Return<void> WVDrmPlugin::getSecureStop(
mPropertySet.app_id(), cdmSsId, identifier, &cdmUsageInfo);
if (isCdmResponseTypeSuccess(res)) {
std::vector<uint8_t> cdmStopVec;
for (CdmUsageInfo::const_iterator iter = cdmUsageInfo.begin();
iter != cdmUsageInfo.end();
++iter) {