PR #23487 opened by Zhao Zhili (quink)
URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23487
Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/23487.patch

# Summary of changes

Fix memleak on error paths.

<!--
If this PR requires new FATE test samples, attach them to the PR and
list their target paths below (relative to the fate-suite root).

Attached filenames must match the sample's filename:

```fate-samples
# e.g. vorbis/new-sample.ogg
```
-->



>From 7b671729f8a0eb96737ac45664f839459a74f8f2 Mon Sep 17 00:00:00 2001
From: Zhao Zhili <[email protected]>
Date: Mon, 15 Jun 2026 22:23:45 +0800
Subject: [PATCH] avformat/mov_chan: free temporary layout on error paths

---
 libavformat/mov_chan.c | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/libavformat/mov_chan.c b/libavformat/mov_chan.c
index cdf5e88ea1..8274e62f3d 100644
--- a/libavformat/mov_chan.c
+++ b/libavformat/mov_chan.c
@@ -402,8 +402,10 @@ static int mov_get_channel_layout(AVChannelLayout 
*ch_layout, uint32_t tag, uint
         }
 
         ret = av_channel_layout_retype(&tmp, 0, 
AV_CHANNEL_LAYOUT_RETYPE_FLAG_CANONICAL);
-        if (ret < 0)
+        if (ret < 0) {
+            av_channel_layout_uninit(&tmp);
             return ret;
+        }
 
         av_channel_layout_uninit(ch_layout);
         *ch_layout = tmp;
@@ -596,6 +598,7 @@ int ff_mov_read_chan(AVFormatContext *s, AVIOContext *pb, 
AVStream *st,
             if (pb->eof_reached) {
                 av_log(s, AV_LOG_ERROR,
                        "reached EOF while reading channel layout\n");
+                av_channel_layout_uninit(&tmp);
                 return AVERROR_INVALIDDATA;
             }
             label     = avio_rb32(pb);          // mChannelLabel
@@ -608,8 +611,10 @@ int ff_mov_read_chan(AVFormatContext *s, AVIOContext *pb, 
AVStream *st,
         }
 
         ret = av_channel_layout_retype(&tmp, 0, 
AV_CHANNEL_LAYOUT_RETYPE_FLAG_CANONICAL);
-        if (ret < 0)
+        if (ret < 0) {
+            av_channel_layout_uninit(&tmp);
             goto out;
+        }
 
         av_channel_layout_uninit(ch_layout);
         *ch_layout = tmp;
@@ -813,8 +818,10 @@ int ff_mov_read_chnl(AVFormatContext *s, AVIOContext *pb, 
AVStream *st, int vers
             }
 
             ret = av_channel_layout_retype(&tmp, 0, 
AV_CHANNEL_LAYOUT_RETYPE_FLAG_CANONICAL);
-            if (ret < 0)
+            if (ret < 0) {
+                av_channel_layout_uninit(&tmp);
                 return ret;
+            }
             av_channel_layout_uninit(ch_layout);
             *ch_layout = tmp;
         } else {
-- 
2.52.0

_______________________________________________
ffmpeg-devel mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to