File ffmpeg-CVE-2020-22039.patch of Package ffmpeg.27460

From: James Almer <jamrial@gmail.com>
Date: Sat, 19 Oct 2019 02:47:44 +0000 (-0300)
Subject: avformat/avienc: add deinit function
X-Git-Tag: n4.3~2648
X-Git-Url: http://git.videolan.org/?p=ffmpeg.git;a=commitdiff_plain;h=a581bb66ea5eb981e2e498ca301df7d1ef15a6a3

avformat/avienc: add deinit function

Fixes ticket #8302

Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: James Almer <jamrial@gmail.com>
---

diff --git a/libavformat/avienc.c b/libavformat/avienc.c
index ac0f04c354..5f143bccce 100644
--- a/libavformat/avienc.c
+++ b/libavformat/avienc.c
@@ -909,7 +909,7 @@ static int avi_write_trailer(AVFormatContext *s)
     AVIContext *avi = s->priv_data;
     AVIOContext *pb = s->pb;
     int res = 0;
-    int i, j, n, nb_frames;
+    int i, n, nb_frames;
     int64_t file_size;
 
     for (i = 0; i < s->nb_streams; i++) {
@@ -962,10 +962,6 @@ static int avi_write_trailer(AVFormatContext *s)
 
     for (i = 0; i < s->nb_streams; i++) {
         AVIStream *avist = s->streams[i]->priv_data;
-        for (j = 0; j < avist->indexes.ents_allocated / AVI_INDEX_CLUSTER_SIZE; j++)
-            av_freep(&avist->indexes.cluster[j]);
-        av_freep(&avist->indexes.cluster);
-        avist->indexes.ents_allocated = avist->indexes.entry = 0;
         if (pb->seekable & AVIO_SEEKABLE_NORMAL) {
             avio_seek(pb, avist->frames_hdr_strm + 4, SEEK_SET);
             avio_wl32(pb, avist->max_size);
@@ -975,6 +971,19 @@ static int avi_write_trailer(AVFormatContext *s)
     return res;
 }
 
+static void avi_deinit(AVFormatContext *s)
+{
+    for (int i = 0; i < s->nb_streams; i++) {
+        AVIStream *avist = s->streams[i]->priv_data;
+        if (!avist)
+            continue;
+        for (int j = 0; j < avist->indexes.ents_allocated / AVI_INDEX_CLUSTER_SIZE; j++)
+            av_freep(&avist->indexes.cluster[j]);
+        av_freep(&avist->indexes.cluster);
+        avist->indexes.ents_allocated = avist->indexes.entry = 0;
+    }
+}
+
 #define OFFSET(x) offsetof(AVIContext, x)
 #define ENC AV_OPT_FLAG_ENCODING_PARAM
 static const AVOption options[] = {
@@ -999,6 +1008,7 @@ AVOutputFormat ff_avi_muxer = {
     .audio_codec    = CONFIG_LIBMP3LAME ? AV_CODEC_ID_MP3 : AV_CODEC_ID_AC3,
     .video_codec    = AV_CODEC_ID_MPEG4,
     .init           = avi_init,
+    .deinit         = avi_deinit,
     .write_header   = avi_write_header,
     .write_packet   = avi_write_packet,
     .write_trailer  = avi_write_trailer,

openSUSE Build Service is sponsored by