summaryrefslogtreecommitdiff
path: root/libavformat/oggparsevorbis.c
diff options
context:
space:
mode:
authorVittorio Giovara <vittorio.giovara@gmail.com>2013-10-05 21:35:31 +0200
committerAnton Khirnov <anton@khirnov.net>2013-10-12 15:24:26 +0200
commited9245dba83f9add60f55718b537b0af2105c60e (patch)
tree79ea74a72ba92e159c67bbfdb6deec6eb2cc65fa /libavformat/oggparsevorbis.c
parent9c15ef35d404fca2adc31276c1eedb11cf485461 (diff)
oggparsevorbis: check allocations
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Diffstat (limited to 'libavformat/oggparsevorbis.c')
-rw-r--r--libavformat/oggparsevorbis.c10
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 */