From 71877da4eb11d5b6255eacd20c99446820446df0 Mon Sep 17 00:00:00 2001 From: Jean-Marc Valin Date: Mon, 14 Mar 2011 06:45:17 -0400 Subject: [PATCH] Error handling --- src/opus_decoder.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/opus_decoder.c b/src/opus_decoder.c index 55e2e005..2b75ae66 100644 --- a/src/opus_decoder.c +++ b/src/opus_decoder.c @@ -149,7 +149,7 @@ static int opus_decode_frame(OpusDecoder *st, const unsigned char *data, if (audiosize > frame_size) { fprintf(stderr, "PCM buffer too small: %d vs %d (mode = %d)\n", audiosize, frame_size, mode); - return -1; + return OPUS_BAD_ARG; } else { frame_size = audiosize; } @@ -315,7 +315,7 @@ static int opus_decode_frame(OpusDecoder *st, const unsigned char *data, } -int parse_size(const unsigned char *data, int len, short *size) +static int parse_size(const unsigned char *data, int len, short *size) { if (len<1) { @@ -411,7 +411,8 @@ int opus_decode(OpusDecoder *st, const unsigned char *data, } break; } - /* FIXME: Check if the number of samples fits in the output buffer */ + if (count*st->frame_size > frame_size) + return OPUS_BAD_ARG; nb_samples=0; for (i=0;i