X-Git-Url: https://git.piment-noir.org/?p=deb_ffmpeg.git;a=blobdiff_plain;f=ffmpeg%2Flibavformat%2Fbethsoftvid.c;h=40a425271d10dc1aa72d84888b75df78b7a3e7d2;hp=c98ff14df164d5961386a9992bdd224347ea5f1c;hb=f6fa7814ccfe3e76514b36cf04f5cd3cb657c8cf;hpb=2ba45a602cbfa7b771effba9b11bb4245c21bc00 diff --git a/ffmpeg/libavformat/bethsoftvid.c b/ffmpeg/libavformat/bethsoftvid.c index c98ff14..40a4252 100644 --- a/ffmpeg/libavformat/bethsoftvid.c +++ b/ffmpeg/libavformat/bethsoftvid.c @@ -180,7 +180,6 @@ static int read_frame(BVID_DemuxContext *vid, AVIOContext *pb, AVPacket *pkt, if ((ret = av_new_packet(pkt, vidbuf_nbytes)) < 0) goto fail; memcpy(pkt->data, vidbuf_start, vidbuf_nbytes); - av_free(vidbuf_start); pkt->pos = position; pkt->stream_index = vid->video_index; @@ -192,13 +191,17 @@ static int read_frame(BVID_DemuxContext *vid, AVIOContext *pb, AVPacket *pkt, if (vid->palette) { uint8_t *pdata = av_packet_new_side_data(pkt, AV_PKT_DATA_PALETTE, BVID_PALETTE_SIZE); - if (pdata) - memcpy(pdata, vid->palette, BVID_PALETTE_SIZE); + if (!pdata) { + ret = AVERROR(ENOMEM); + av_log(s, AV_LOG_ERROR, "Failed to allocate palette side data\n"); + goto fail; + } + memcpy(pdata, vid->palette, BVID_PALETTE_SIZE); + av_freep(&vid->palette); } vid->nframes--; // used to check if all the frames were read - return 0; fail: av_free(vidbuf_start); return ret;