diff --git a/libavformat/matroskadec.c b/libavformat/matroskadec.c index 162697ff12..72624dc3f1 100644 --- a/libavformat/matroskadec.c +++ b/libavformat/matroskadec.c @@ -3239,11 +3239,8 @@ fail: static int matroska_parse_prores(MatroskaTrack *track, uint8_t *src, uint8_t **pdst, int *size) { - uint8_t *dst = src; - int dstlen = *size; - - if (AV_RB32(&src[4]) != MKBETAG('i', 'c', 'p', 'f')) { - dstlen += 8; + uint8_t *dst; + int dstlen = *size + 8; dst = av_malloc(dstlen + AV_INPUT_BUFFER_PADDING_SIZE); if (!dst) @@ -3253,7 +3250,6 @@ static int matroska_parse_prores(MatroskaTrack *track, uint8_t *src, AV_WB32(dst + 4, MKBETAG('i', 'c', 'p', 'f')); memcpy(dst + 8, src, dstlen - 8); memset(dst + dstlen, 0, AV_INPUT_BUFFER_PADDING_SIZE); - } *pdst = dst; *size = dstlen; @@ -3408,7 +3404,8 @@ static int matroska_parse_frame(MatroskaDemuxContext *matroska, pkt_data = wv_data; } - if (st->codecpar->codec_id == AV_CODEC_ID_PRORES) { + if (st->codecpar->codec_id == AV_CODEC_ID_PRORES && + AV_RB32(pkt_data + 4) != MKBETAG('i', 'c', 'p', 'f')) { uint8_t *pr_data; res = matroska_parse_prores(track, pkt_data, &pr_data, &pkt_size); if (res < 0) {