Commit 9026ec8a authored by Anton Khirnov's avatar Anton Khirnov Committed by Sean McGovern

matroskadec: make sure not to leave EbmlBin in an inconsistent state

If a read fails, the current code will free the data but leave the size
non-zero. Make sure the size is zeroed in such a case.

CC: libav-stable@libav.org
Bug-Id: 1001
Found-By: Kamil Frankowicz
Signed-off-by: 's avatarSean McGovern <gseanmcg@gmail.com>
parent 9b1db2d3
...@@ -750,16 +750,19 @@ static int ebml_read_ascii(AVIOContext *pb, int size, char **str) ...@@ -750,16 +750,19 @@ static int ebml_read_ascii(AVIOContext *pb, int size, char **str)
static int ebml_read_binary(AVIOContext *pb, int length, EbmlBin *bin) static int ebml_read_binary(AVIOContext *pb, int length, EbmlBin *bin)
{ {
av_free(bin->data); av_free(bin->data);
bin->size = 0;
if (!(bin->data = av_mallocz(length + AV_INPUT_BUFFER_PADDING_SIZE))) if (!(bin->data = av_mallocz(length + AV_INPUT_BUFFER_PADDING_SIZE)))
return AVERROR(ENOMEM); return AVERROR(ENOMEM);
bin->size = length;
bin->pos = avio_tell(pb); bin->pos = avio_tell(pb);
if (avio_read(pb, bin->data, length) != length) { if (avio_read(pb, bin->data, length) != length) {
av_freep(&bin->data); av_freep(&bin->data);
return AVERROR(EIO); return AVERROR(EIO);
} }
bin->size = length;
return 0; return 0;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment