Fix getSecureStop returns zero opaque data intermittently.

Merge from http://go/wvgerrit/69587

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: I787e2b931561f07ca7346cb5a8968b868c08cee8
This commit is contained in:
Edwin Wong
2019-01-05 16:13:32 -08:00
parent 26646c1700
commit 385616a3f0

View File

@@ -671,7 +671,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;
@@ -687,7 +689,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) {