diff options
author | James Dong <jdong@google.com> | 2011-03-14 14:43:24 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-03-14 14:43:24 -0700 |
commit | de6ee790f0e0b758894f72daf3ec742fdabf3d22 (patch) | |
tree | 2df8b01efcd9aa96d74d057200a6eb9f499dd788 /media/libstagefright/codecs | |
parent | 35812d2cc295e95e9383b64c07f5f8919d7a6885 (diff) | |
parent | 1549dbbfb0d18201cc568b4fa2bd6b0e7f582e9d (diff) | |
download | frameworks_av-de6ee790f0e0b758894f72daf3ec742fdabf3d22.zip frameworks_av-de6ee790f0e0b758894f72daf3ec742fdabf3d22.tar.gz frameworks_av-de6ee790f0e0b758894f72daf3ec742fdabf3d22.tar.bz2 |
Merge "libstagefright: Add error handling in AMRNB deooder"
Diffstat (limited to 'media/libstagefright/codecs')
-rw-r--r-- | media/libstagefright/codecs/amrnb/dec/AMRNBDecoder.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/media/libstagefright/codecs/amrnb/dec/AMRNBDecoder.cpp b/media/libstagefright/codecs/amrnb/dec/AMRNBDecoder.cpp index fb300da..a11d46b 100644 --- a/media/libstagefright/codecs/amrnb/dec/AMRNBDecoder.cpp +++ b/media/libstagefright/codecs/amrnb/dec/AMRNBDecoder.cpp @@ -14,6 +14,10 @@ * limitations under the License. */ +//#define LOG_NDEBUG 0 +#define LOG_TAG "AMRNBDecoder" +#include <utils/Log.h> + #include "AMRNBDecoder.h" #include "gsmamr_dec.h" @@ -154,18 +158,24 @@ status_t AMRNBDecoder::read( const uint8_t *inputPtr = (const uint8_t *)mInputBuffer->data() + mInputBuffer->range_offset(); - size_t numBytesRead = + int32_t numBytesRead = AMRDecode(mState, (Frame_Type_3GPP)((inputPtr[0] >> 3) & 0x0f), (UWord8 *)&inputPtr[1], static_cast<int16_t *>(buffer->data()), MIME_IETF); + if (numBytesRead == -1 ) { + LOGE("PV AMR decoder AMRDecode() call failed"); + buffer->release(); + buffer = NULL; + return ERROR_MALFORMED; + } ++numBytesRead; // Include the frame type header byte. buffer->set_range(0, kNumSamplesPerFrame * sizeof(int16_t)); - if (numBytesRead > mInputBuffer->range_length()) { + if (static_cast<size_t>(numBytesRead) > mInputBuffer->range_length()) { // This is bad, should never have happened, but did. Abort now. buffer->release(); |