Imported Debian version 2.5.0~trusty1.1
[deb_ffmpeg.git] / ffmpeg / libavformat / bethsoftvid.c
index c98ff14df164d5961386a9992bdd224347ea5f1c..40a425271d10dc1aa72d84888b75df78b7a3e7d2 100644 (file)
@@ -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;