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 */