diff options
-rw-r--r-- | include/media/ICrypto.h | 2 | ||||
-rw-r--r-- | media/libmedia/ICrypto.cpp | 29 | ||||
-rw-r--r-- | media/libmediaplayerservice/Crypto.cpp | 2 | ||||
-rw-r--r-- | media/libmediaplayerservice/Crypto.h | 2 | ||||
-rw-r--r-- | media/libstagefright/MediaCodec.cpp | 8 |
5 files changed, 19 insertions, 24 deletions
diff --git a/include/media/ICrypto.h b/include/media/ICrypto.h index 32a2cf7..61059bd 100644 --- a/include/media/ICrypto.h +++ b/include/media/ICrypto.h @@ -41,7 +41,7 @@ struct ICrypto : public IInterface { virtual bool requiresSecureDecoderComponent( const char *mime) const = 0; - virtual status_t decrypt( + virtual ssize_t decrypt( bool secure, const uint8_t key[16], const uint8_t iv[16], diff --git a/media/libmedia/ICrypto.cpp b/media/libmedia/ICrypto.cpp index 3452e5c..2defc2d 100644 --- a/media/libmedia/ICrypto.cpp +++ b/media/libmedia/ICrypto.cpp @@ -91,7 +91,7 @@ struct BpCrypto : public BpInterface<ICrypto> { return reply.readInt32() != 0; } - virtual status_t decrypt( + virtual ssize_t decrypt( bool secure, const uint8_t key[16], const uint8_t iv[16], @@ -136,21 +136,17 @@ struct BpCrypto : public BpInterface<ICrypto> { remote()->transact(DECRYPT, data, &reply); - status_t result = reply.readInt32(); + ssize_t result = reply.readInt32(); if (result >= ERROR_DRM_VENDOR_MIN && result <= ERROR_DRM_VENDOR_MAX) { errorDetailMsg->setTo(reply.readCString()); } - if (result != OK) { - return result; + if (!secure && result >= 0) { + reply.read(dstPtr, result); } - if (!secure) { - reply.read(dstPtr, totalSize); - } - - return OK; + return result; } private: @@ -259,8 +255,7 @@ status_t BnCrypto::onTransact( } AString errorDetailMsg; - - status_t err = decrypt( + ssize_t result = decrypt( secure, key, iv, @@ -270,18 +265,18 @@ status_t BnCrypto::onTransact( dstPtr, &errorDetailMsg); - reply->writeInt32(err); + reply->writeInt32(result); - if (err >= ERROR_DRM_VENDOR_MIN - && err <= ERROR_DRM_VENDOR_MAX) { + if (result >= ERROR_DRM_VENDOR_MIN + && result <= ERROR_DRM_VENDOR_MAX) { reply->writeCString(errorDetailMsg.c_str()); } if (!secure) { - if (err == OK) { - reply->write(dstPtr, totalSize); + if (result >= 0) { + CHECK_LE(result, static_cast<ssize_t>(totalSize)); + reply->write(dstPtr, result); } - free(dstPtr); dstPtr = NULL; } diff --git a/media/libmediaplayerservice/Crypto.cpp b/media/libmediaplayerservice/Crypto.cpp index d35d5b1..0e8f913 100644 --- a/media/libmediaplayerservice/Crypto.cpp +++ b/media/libmediaplayerservice/Crypto.cpp @@ -141,7 +141,7 @@ bool Crypto::requiresSecureDecoderComponent(const char *mime) const { return mPlugin->requiresSecureDecoderComponent(mime); } -status_t Crypto::decrypt( +ssize_t Crypto::decrypt( bool secure, const uint8_t key[16], const uint8_t iv[16], diff --git a/media/libmediaplayerservice/Crypto.h b/media/libmediaplayerservice/Crypto.h index c5aa3c6..d066774 100644 --- a/media/libmediaplayerservice/Crypto.h +++ b/media/libmediaplayerservice/Crypto.h @@ -42,7 +42,7 @@ struct Crypto : public BnCrypto { virtual bool requiresSecureDecoderComponent( const char *mime) const; - virtual status_t decrypt( + virtual ssize_t decrypt( bool secure, const uint8_t key[16], const uint8_t iv[16], diff --git a/media/libstagefright/MediaCodec.cpp b/media/libstagefright/MediaCodec.cpp index d28322f..2060699 100644 --- a/media/libstagefright/MediaCodec.cpp +++ b/media/libstagefright/MediaCodec.cpp @@ -1347,7 +1347,7 @@ status_t MediaCodec::onQueueInputBuffer(const sp<AMessage> &msg) { AString *errorDetailMsg; CHECK(msg->findPointer("errorDetailMsg", (void **)&errorDetailMsg)); - status_t err = mCrypto->decrypt( + ssize_t result = mCrypto->decrypt( (mFlags & kFlagIsSecure) != 0, key, iv, @@ -1358,11 +1358,11 @@ status_t MediaCodec::onQueueInputBuffer(const sp<AMessage> &msg) { info->mData->base(), errorDetailMsg); - if (err != OK) { - return err; + if (result < 0) { + return result; } - info->mData->setRange(0, size); + info->mData->setRange(0, result); } reply->setBuffer("buffer", info->mData); |