aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/dxa.c
diff options
context:
space:
mode:
authorMax Horn <max@quendi.de>2011-04-12 17:44:20 +0200
committerLuca Barbato <lu_zero@gentoo.org>2011-04-14 13:56:09 +0200
commitca402f32e392590a81a1381dab41c4f9c2c2f98a (patch)
tree96fecc535e204b9406e2f888cb1f8ac3ce9b3047 /libavformat/dxa.c
parentad4c50347a46a67807925245e730f738cb4d6562 (diff)
downloadffmpeg-ca402f32e392590a81a1381dab41c4f9c2c2f98a.tar.gz
handle malloc failures in ff_get_wav_header
ff_get_wav_header is reading data from a WAVE file and then uses it (without validation) to malloc a buffer. It then proceeded to read data into the buffer, without verifying that the allocation succeeded. To address this, change ff_get_wav_header to return an error if allocation failed, and adapted all calling code to handle that error. Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
Diffstat (limited to 'libavformat/dxa.c')
-rw-r--r--libavformat/dxa.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/libavformat/dxa.c b/libavformat/dxa.c
index 7fec26fd9e..1e1d50581c 100644
--- a/libavformat/dxa.c
+++ b/libavformat/dxa.c
@@ -60,6 +60,7 @@ static int dxa_read_header(AVFormatContext *s, AVFormatParameters *ap)
int w, h;
int num, den;
int flags;
+ int ret;
tag = avio_rl32(pb);
if (tag != MKTAG('D', 'E', 'X', 'A'))
@@ -102,7 +103,9 @@ static int dxa_read_header(AVFormatContext *s, AVFormatParameters *ap)
ast = av_new_stream(s, 0);
if (!ast)
return -1;
- ff_get_wav_header(pb, ast->codec, fsize);
+ ret = ff_get_wav_header(pb, ast->codec, fsize);
+ if (ret < 0)
+ return ret;
// find 'data' chunk
while(avio_tell(pb) < c->vidpos && !pb->eof_reached){
tag = avio_rl32(pb);