This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

The following commit(s) were added to refs/heads/master by this push:
     new f84c859ec5 avcodec/bsf/extract_extradata: Replace incorrect size 
accounting
f84c859ec5 is described below

commit f84c859ec54d11bd743daafd89f42bb34873d29d
Author:     Michael Niedermayer <[email protected]>
AuthorDate: Fri Mar 13 02:11:20 2026 +0100
Commit:     James Almer <[email protected]>
CommitDate: Fri Mar 13 02:03:59 2026 +0000

    avcodec/bsf/extract_extradata: Replace incorrect size accounting
    
    Fixes: out of array writes
    Fixes: 
492054712/clusterfuzz-testcase-minimized-ffmpeg_BSF_EXTRACT_EXTRADATA_fuzzer-5705993148497920
    
    Found-by: continuous fuzzing process 
https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
    Signed-off-by: Michael Niedermayer <[email protected]>
---
 libavcodec/bsf/extract_extradata.c | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

diff --git a/libavcodec/bsf/extract_extradata.c 
b/libavcodec/bsf/extract_extradata.c
index 51879b0f85..1532eb6a7d 100644
--- a/libavcodec/bsf/extract_extradata.c
+++ b/libavcodec/bsf/extract_extradata.c
@@ -396,14 +396,10 @@ static int extract_extradata_lcevc(AVBSFContext *ctx, 
AVPacket *pkt,
             return AVERROR(ENOMEM);
         }
 
-        *data = extradata;
-        *size = 0;
-
         bytestream2_init_writer(&pb_extradata, extradata, extradata_size);
         if (s->remove)
             bytestream2_init_writer(&pb_filtered_data, filtered_buf->data, 
filtered_size);
 
-        filtered_size = 0;
         for (i = 0; i < s->h2645_pkt.nb_nals; i++) {
             H2645NAL *nal = &s->h2645_pkt.nals[i];
             if (val_in_array(extradata_nal_types, nb_extradata_nal_types,
@@ -411,33 +407,34 @@ static int extract_extradata_lcevc(AVBSFContext *ctx, 
AVPacket *pkt,
                 bytestream2_put_be24(&pb_extradata, 1); //startcode
                 ret = write_lcevc_nalu(ctx, &pb_extradata, nal, 0);
                 if (ret < 0) {
-                    av_freep(data);
+                    av_freep(&extradata);
                     av_buffer_unref(&filtered_buf);
                     return ret;
                 }
-                *size += ret;
                 if (s->remove) {
                     bytestream2_put_be24(&pb_filtered_data, 1); //startcode
                     ret = write_lcevc_nalu(ctx, &pb_filtered_data, nal, 1);
                     if (ret < 0) {
-                        av_freep(data);
+                        av_freep(&extradata);
                         av_buffer_unref(&filtered_buf);
                         return ret;
                     }
-                    filtered_size += ret;
                 }
             } else if (s->remove) {
                 bytestream2_put_be24(&pb_filtered_data, 1); //startcode
                 bytestream2_put_bufferu(&pb_filtered_data, nal->raw_data, 
nal->raw_size);
-                filtered_size += nal->raw_size;
             }
         }
+        *data = extradata;
+        *size = bytestream2_tell_p(&pb_extradata);
+        av_assert0(*size <= extradata_size);
 
         if (s->remove) {
+            av_assert0(bytestream2_tell_p(&pb_filtered_data) <= filtered_size);
             av_buffer_unref(&pkt->buf);
             pkt->buf  = filtered_buf;
             pkt->data = filtered_buf->data;
-            pkt->size = filtered_size;
+            pkt->size = bytestream2_tell_p(&pb_filtered_data);
         }
     }
 

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

Reply via email to