Fixes: use of uninitialized value
Fixes: 
70907/clusterfuzz-testcase-minimized-ffmpeg_BSF_VP9_METADATA_fuzzer-6339363208757248

Found-by: continuous fuzzing process 
https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
---
On 11/08/2024 19:05, Mark Thompson wrote:
> The correct fix therefore would be to constrain the second read values to be 
> identical to the first, not to introduce new syntax elements not in the 
> standard to cover the invalid case.

Like this.  (Marked in the same way as your suggested patch based on my 
assumption that it fixes the problem - please check.)

Trace output is correct in the normal case, and catches the error in the bad 
one:

[trace_headers @ 0x55a0f5decb40] Packet: 11971 bytes, pts 366, dts 366.
[trace_headers @ 0x55a0f5decb40] Superframe Index
[trace_headers @ 0x55a0f5decb40] 0           superframe_marker                  
                       110 = 6
[trace_headers @ 0x55a0f5decb40] 3           bytes_per_framesize_minus_1        
                        01 = 1
[trace_headers @ 0x55a0f5decb40] 5           frames_in_superframe_minus_1       
                       001 = 1
[trace_headers @ 0x55a0f5decb40] 8           frame_sizes[0]                     
          1011110000101110 = 11964
[trace_headers @ 0x55a0f5decb40] 24          frame_sizes[1]                     
          0000000100000000 = 1
[trace_headers @ 0x55a0f5decb40] 40          superframe_marker                  
                       110 = 6
[trace_headers @ 0x55a0f5decb40] 43          bytes_per_framesize_minus_1        
                        01 = 1
[trace_headers @ 0x55a0f5decb40] 45          frames_in_superframe_minus_1       
                       001 = 1

or

[trace_headers @ 0x555af04d7b40] Packet: 11971 bytes, pts 366, dts 366.
[trace_headers @ 0x555af04d7b40] Superframe Index
[trace_headers @ 0x555af04d7b40] 0           superframe_marker                  
                       110 = 6
[trace_headers @ 0x555af04d7b40] 3           bytes_per_framesize_minus_1        
                        01 = 1
[trace_headers @ 0x555af04d7b40] 5           frames_in_superframe_minus_1       
                       001 = 1
[trace_headers @ 0x555af04d7b40] 8           frame_sizes[0]                     
          1011110000101110 = 11964
[trace_headers @ 0x555af04d7b40] 24          frame_sizes[1]                     
          0000000100000000 = 1
[trace_headers @ 0x555af04d7b40] 40          superframe_marker                  
                       110 = 6
[trace_headers @ 0x555af04d7b40] 43          bytes_per_framesize_minus_1        
                        10 = 2
[trace_headers @ 0x555af04d7b40] bytes_per_framesize_minus_1 out of range: 2, 
but must be in [1,1].
[vost#0:0/copy @ 0x555af0538400] Error applying bitstream filters to a packet: 
Invalid data found when processing input

Thanks,

- Mark

 libavcodec/cbs_vp9_syntax_template.c | 11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/libavcodec/cbs_vp9_syntax_template.c 
b/libavcodec/cbs_vp9_syntax_template.c
index 2f08eccf18..5ed3c700dc 100644
--- a/libavcodec/cbs_vp9_syntax_template.c
+++ b/libavcodec/cbs_vp9_syntax_template.c
@@ -421,9 +421,14 @@ static int FUNC(superframe_index)(CodedBitstreamContext 
*ctx, RWContext *rw,
             frame_sizes[i], 1, i);
     }

-    f(3, superframe_marker);
-    f(2, bytes_per_framesize_minus_1);
-    f(3, frames_in_superframe_minus_1);
+    // Second instance of the superframe header must be identical
+    // to the first.
+    fixed(3,       superframe_marker,
+          current->superframe_marker);
+    fixed(2,       bytes_per_framesize_minus_1,
+          current->bytes_per_framesize_minus_1);
+    fixed(3,       frames_in_superframe_minus_1,
+          current->frames_in_superframe_minus_1);

     return 0;
 }
-- 
2.43.0


_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel

To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".

Reply via email to