matroskadec: pad EBML_BIN data.
authorAnton Khirnov <anton@khirnov.net>
Fri, 15 Nov 2013 09:15:24 +0000 (10:15 +0100)
committerAnton Khirnov <anton@khirnov.net>
Thu, 21 Nov 2013 19:54:30 +0000 (20:54 +0100)
It might be passed to code requiring padding, such as lzo decompression.

Fixes invalid reads.
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC:libav-stable@libav.org

libavformat/matroskadec.c

index f798342..764dbf8 100644 (file)
@@ -734,9 +734,11 @@ static int ebml_read_ascii(AVIOContext *pb, int size, char **str)
 static int ebml_read_binary(AVIOContext *pb, int length, EbmlBin *bin)
 {
     av_free(bin->data);
-    if (!(bin->data = av_malloc(length)))
+    if (!(bin->data = av_malloc(length + FF_INPUT_BUFFER_PADDING_SIZE)))
         return AVERROR(ENOMEM);
 
+    memset(bin->data + length, 0, FF_INPUT_BUFFER_PADDING_SIZE);
+
     bin->size = length;
     bin->pos  = avio_tell(pb);
     if (avio_read(pb, bin->data, length) != length) {