diff options
| author | 2023-04-12 12:46:05 +0000 | |
|---|---|---|
| committer | 2023-04-12 12:46:05 +0000 | |
| commit | d179c3c2b5178fb2cb87b7df9b441cdc2be8e4e5 (patch) | |
| tree | 73ae24181d50b8587bf79182fbdee50e540ca2f7 | |
| parent | cb29ef2c996e58c40b99c7671167f66642aa178b (diff) | |
| parent | c21e96556f5403d8668ea4474b7ce0d9f0ee516d (diff) | |
Merge "Catch nullptr possibilities in MediaExtractor jni code" into udc-dev am: d63a1d1644 am: c21e96556f
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22555207
Change-Id: I94765039dd315d347bec53aaafa565f54d1c20fa
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
| -rw-r--r-- | media/jni/android_media_MediaExtractor.cpp | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/media/jni/android_media_MediaExtractor.cpp b/media/jni/android_media_MediaExtractor.cpp index 116237f6b998..609c7a40bb36 100644 --- a/media/jni/android_media_MediaExtractor.cpp +++ b/media/jni/android_media_MediaExtractor.cpp @@ -196,6 +196,15 @@ status_t JMediaExtractor::readSampleData( dstSize = (size_t) env->GetDirectBufferCapacity(byteBuf); } + // unlikely, but GetByteArrayElements() can fail + if (dst == nullptr) { + ALOGE("no buffer into which to read the data"); + if (byteArray != NULL) { + env->ReleaseByteArrayElements(byteArray, (jbyte *)dst, 0); + } + return -ENOMEM; + } + if (dstSize < offset) { if (byteArray != NULL) { env->ReleaseByteArrayElements(byteArray, (jbyte *)dst, 0); @@ -204,8 +213,10 @@ status_t JMediaExtractor::readSampleData( return -ERANGE; } + // passes in the backing memory to use, so it doesn't fail sp<ABuffer> buffer = new ABuffer((char *)dst + offset, dstSize - offset); + buffer->setRange(0, 0); // mark it empty status_t err = mImpl->readSampleData(buffer); if (byteArray != NULL) { |