summaryrefslogtreecommitdiffstats
path: root/libavformat/riff.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/riff.c
parentad4c50347a46a67807925245e730f738cb4d6562 (diff)
downloadffmpeg-streaming-ca402f32e392590a81a1381dab41c4f9c2c2f98a.zip
ffmpeg-streaming-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/riff.c')
-rw-r--r--libavformat/riff.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/libavformat/riff.c b/libavformat/riff.c
index 792c206..c73152d 100644
--- a/libavformat/riff.c
+++ b/libavformat/riff.c
@@ -480,7 +480,7 @@ void ff_put_bmp_header(AVIOContext *pb, AVCodecContext *enc, const AVCodecTag *t
* WAVEFORMATEX adds 'WORD cbSize' and basically makes itself
* an openended structure.
*/
-void ff_get_wav_header(AVIOContext *pb, AVCodecContext *codec, int size)
+int ff_get_wav_header(AVIOContext *pb, AVCodecContext *codec, int size)
{
int id;
@@ -510,6 +510,8 @@ void ff_get_wav_header(AVIOContext *pb, AVCodecContext *codec, int size)
codec->extradata_size = cbSize;
if (cbSize > 0) {
codec->extradata = av_mallocz(codec->extradata_size + FF_INPUT_BUFFER_PADDING_SIZE);
+ if (!codec->extradata)
+ return AVERROR(ENOMEM);
avio_read(pb, codec->extradata, codec->extradata_size);
size -= cbSize;
}
@@ -524,6 +526,8 @@ void ff_get_wav_header(AVIOContext *pb, AVCodecContext *codec, int size)
codec->channels = 0;
codec->sample_rate = 0;
}
+
+ return 0;
}
OpenPOWER on IntegriCloud