diff options
| author | 2023-04-12 12:41:03 +0000 | |
|---|---|---|
| committer | 2023-04-12 12:41:03 +0000 | |
| commit | c21e96556f5403d8668ea4474b7ce0d9f0ee516d (patch) | |
| tree | fa9cbc6b0aabe29c7151724a834d4d8b39c74af3 | |
| parent | 0cafff000da0cf443428e7b2a82979d48b6bf690 (diff) | |
| parent | d63a1d1644ece3585813bb36028dcf323954eaba (diff) | |
Merge "Catch nullptr possibilities in MediaExtractor jni code" into udc-dev am: d63a1d1644
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/22555207
Change-Id: I62806ed80b13022e1828f180daa3eb893ebfd721
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) { |