diff options
author | Vittorio Giovara <vittorio.giovara@gmail.com> | 2013-10-05 21:35:31 +0200 |
---|---|---|
committer | Anton Khirnov <anton@khirnov.net> | 2013-10-12 15:24:26 +0200 |
commit | ed9245dba83f9add60f55718b537b0af2105c60e (patch) | |
tree | 79ea74a72ba92e159c67bbfdb6deec6eb2cc65fa /libavformat | |
parent | 9c15ef35d404fca2adc31276c1eedb11cf485461 (diff) | |
download | ffmpeg-ed9245dba83f9add60f55718b537b0af2105c60e.tar.gz |
oggparsevorbis: check allocations
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Diffstat (limited to 'libavformat')
-rw-r--r-- | libavformat/oggparsevorbis.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/libavformat/oggparsevorbis.c b/libavformat/oggparsevorbis.c index 82833904b8..1804e9a6af 100644 --- a/libavformat/oggparsevorbis.c +++ b/libavformat/oggparsevorbis.c @@ -172,15 +172,17 @@ struct oggvorbis_private { int final_duration; }; -static unsigned int fixup_vorbis_headers(AVFormatContext *as, - struct oggvorbis_private *priv, - uint8_t **buf) +static int fixup_vorbis_headers(AVFormatContext *as, + struct oggvorbis_private *priv, + uint8_t **buf) { int i, offset, len, err; unsigned char *ptr; len = priv->len[0] + priv->len[1] + priv->len[2]; ptr = *buf = av_mallocz(len + len / 255 + 64); + if (!ptr) + return AVERROR(ENOMEM); ptr[0] = 2; offset = 1; @@ -236,6 +238,8 @@ static int vorbis_header(AVFormatContext *s, int idx) priv->len[pkt_type >> 1] = os->psize; priv->packet[pkt_type >> 1] = av_mallocz(os->psize); + if (!priv->packet[pkt_type >> 1]) + return AVERROR(ENOMEM); memcpy(priv->packet[pkt_type >> 1], os->buf + os->pstart, os->psize); if (os->buf[os->pstart] == 1) { const uint8_t *p = os->buf + os->pstart + 7; /* skip "\001vorbis" tag */ |