[FFmpeg-cvslog] avformat/mux: Sanitize packets without data and side-data

Andreas Rheinhardt git at videolan.org
Sun Oct 3 23:48:17 EEST 2021


ffmpeg | branch: master | Andreas Rheinhardt <andreas.rheinhardt at outlook.com> | Fri Sep  3 22:05:21 2021 +0200| [805ec95f8eb5664bf11c4c9190c868fd5521d80a] | committer: Andreas Rheinhardt

avformat/mux: Sanitize packets without data and side-data

The BSF API treats such packets as signalling EOF and therefore
such a packet might corrupt the BSF state. In such a case,
the guarantee that av_interleaved_write_frame() always frees
the packet is not upheld.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt at outlook.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=805ec95f8eb5664bf11c4c9190c868fd5521d80a
---

 libavformat/mux.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/libavformat/mux.c b/libavformat/mux.c
index 2053a5636e..d7b2bdb4b3 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -787,6 +787,13 @@ static int prepare_input_packet(AVFormatContext *s, AVStream *st, AVPacket *pkt)
     if (sti->is_intra_only)
         pkt->flags |= AV_PKT_FLAG_KEY;
 
+    if (!pkt->data && !pkt->side_data_elems) {
+        /* Such empty packets signal EOS for the BSF API; so sanitize
+         * the packet by allocating data of size 0 (+ padding). */
+        av_buffer_unref(&pkt->buf);
+        return av_packet_make_refcounted(pkt);
+    }
+
     return 0;
 }
 



More information about the ffmpeg-cvslog mailing list