summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/codecs
diff options
context:
space:
mode:
authorJames Dong <jdong@google.com>2011-03-14 14:43:24 -0700
committerAndroid (Google) Code Review <android-gerrit@google.com>2011-03-14 14:43:24 -0700
commitde6ee790f0e0b758894f72daf3ec742fdabf3d22 (patch)
tree2df8b01efcd9aa96d74d057200a6eb9f499dd788 /media/libstagefright/codecs
parent35812d2cc295e95e9383b64c07f5f8919d7a6885 (diff)
parent1549dbbfb0d18201cc568b4fa2bd6b0e7f582e9d (diff)
downloadframeworks_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.cpp14
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();