diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index a616fb3241..6156c2f9b4 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -2913,13 +2913,10 @@ static int matroska_parse_rm_audio(MatroskaDemuxContext *matroska, while (track->audio.pkt_cnt) { int ret; - AVPacket *pkt = av_mallocz(sizeof(AVPacket)); - if (!pkt) - return AVERROR(ENOMEM); + AVPacket pktl, *pkt = &pktl; ret = av_new_packet(pkt, a); if (ret < 0) { - av_free(pkt); return ret; } memcpy(pkt->data, @@ -2931,7 +2928,7 @@ static int matroska_parse_rm_audio(MatroskaDemuxContext *matroska, pkt->stream_index = st->index; ret = ff_packet_list_put(&matroska->queue, &matroska->queue_end, pkt, 0); if (ret < 0) { - av_packet_free(&pkt); + av_packet_unref(pkt); return AVERROR(ENOMEM); } } @@ -3028,7 +3025,7 @@ static int matroska_parse_webvtt(MatroskaDemuxContext *matroska, uint64_t duration, int64_t pos) { - AVPacket *pkt; + AVPacket pktl, *pkt = &pktl; uint8_t *id, *settings, *text, *buf; int id_len, settings_len, text_len; uint8_t *p, *q; @@ -3085,12 +3082,8 @@ static int matroska_parse_webvtt(MatroskaDemuxContext *matroska, if (text_len <= 0) return AVERROR_INVALIDDATA; - pkt = av_mallocz(sizeof(*pkt)); - if (!pkt) - return AVERROR(ENOMEM); err = av_new_packet(pkt, text_len); if (err < 0) { - av_free(pkt); return err; } @@ -3102,7 +3095,6 @@ static int matroska_parse_webvtt(MatroskaDemuxContext *matroska, id_len); if (!buf) { av_packet_unref(pkt); - av_free(pkt); return AVERROR(ENOMEM); } memcpy(buf, id, id_len); @@ -3114,7 +3106,6 @@ static int matroska_parse_webvtt(MatroskaDemuxContext *matroska, settings_len); if (!buf) { av_packet_unref(pkt); - av_free(pkt); return AVERROR(ENOMEM); } memcpy(buf, settings, settings_len); @@ -3134,7 +3125,7 @@ static int matroska_parse_webvtt(MatroskaDemuxContext *matroska, err = ff_packet_list_put(&matroska->queue, &matroska->queue_end, pkt, 0); if (err < 0) { - av_packet_free(&pkt); + av_packet_unref(pkt); return AVERROR(ENOMEM); }