wmaprodec: return an error, not 0, when the input is too small.
authorAnton Khirnov <anton@khirnov.net>
Wed, 6 Mar 2013 09:02:50 +0000 (10:02 +0100)
committerAnton Khirnov <anton@khirnov.net>
Fri, 8 Mar 2013 07:12:26 +0000 (08:12 +0100)
Returning 0 may result in an infinite loop in valid calling programs. A
decoder should never return 0 without producing any output.

CC:libav-stable@libav.org

libavcodec/wmaprodec.c

index d906f90..56bb83c 100644 (file)
@@ -1502,8 +1502,11 @@ static int decode_packet(AVCodecContext *avctx, void *data,
         s->packet_done = 0;
 
         /** sanity check for the buffer length */
-        if (buf_size < avctx->block_align)
-            return 0;
+        if (buf_size < avctx->block_align) {
+            av_log(avctx, AV_LOG_ERROR, "Input packet too small (%d < %d)\n",
+                   buf_size, avctx->block_align);
+            return AVERROR_INVALIDDATA;
+        }
 
         s->next_packet_start = buf_size - avctx->block_align;
         buf_size = avctx->block_align;