From a2eeb8abf7ce9ee633ec72e4086ff103a57848d6 Mon Sep 17 00:00:00 2001 From: Rahul Frias Date: Sat, 20 Apr 2013 23:52:50 -0700 Subject: [PATCH] Native fault in MediaDrm property call OEMCrypto was being initialized on session creation. Calls to get property information may occur before any sessions are created. This resulted in calls to OEMCrypto before a call to OEMCrypto_Initialize which caused a segfault. OEMCrypto initialization is now verified before any other calls are made. Unit tests have been modified to verify that this indeed works. bug: 8660973 Change-Id: I1b14fa8ad2e88750776b28715a48d8a1d1c57089 --- libwvdrmengine/cdm/core/src/crypto_engine.cpp | 9 +++++++++ libwvdrmengine/cdm/test/request_license_test.cpp | 4 ---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/libwvdrmengine/cdm/core/src/crypto_engine.cpp b/libwvdrmengine/cdm/core/src/crypto_engine.cpp index f911ffc0..67dcb196 100644 --- a/libwvdrmengine/cdm/core/src/crypto_engine.cpp +++ b/libwvdrmengine/cdm/core/src/crypto_engine.cpp @@ -179,6 +179,9 @@ bool CryptoEngine::GetToken(std::string* token) { } CryptoEngine::SecurityLevel CryptoEngine::GetSecurityLevel() { + if (!Init()) + return kSecurityLevelUnknown; + std::string security_level = OEMCrypto_SecurityLevel(); if ((security_level.size() != 2) || @@ -197,6 +200,9 @@ CryptoEngine::SecurityLevel CryptoEngine::GetSecurityLevel() { } bool CryptoEngine::GetDeviceUniqueId(std::string* deviceId) { + if (!Init()) + return false; + std::vector id; size_t idLength = 32; @@ -213,6 +219,9 @@ bool CryptoEngine::GetDeviceUniqueId(std::string* deviceId) { } bool CryptoEngine::GetSystemId(uint32_t* systemId) { + if (!Init()) + return false; + uint8_t buf[72]; size_t buflen = 72; diff --git a/libwvdrmengine/cdm/test/request_license_test.cpp b/libwvdrmengine/cdm/test/request_license_test.cpp index 635316a3..e5b015f2 100644 --- a/libwvdrmengine/cdm/test/request_license_test.cpp +++ b/libwvdrmengine/cdm/test/request_license_test.cpp @@ -200,10 +200,6 @@ TEST_F(WvCdmRequestLicenseTest, QueryKeyStatus) { } TEST_F(WvCdmRequestLicenseTest, QueryStatus) { - decryptor_.OpenSession(g_key_system, &session_id_); - GenerateKeyRequest(g_key_system, g_key_id); - VerifyKeyRequestResponse(g_license_server, g_client_auth, g_key_id, false); - CdmQueryMap query_info; CdmQueryMap::iterator itr; EXPECT_EQ(wvcdm::NO_ERROR, decryptor_.QueryStatus(&query_info));