From e5c1ca60d8e44fd388f7cc63aa2d4283d6c931df Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Thu, 19 Feb 2026 00:30:54 +0100 Subject: [PATCH] avcodec/cbs_h266_syntax_template: bound slice width/height by remaining tiles Fixes: out of array access Fixes: crash_vvc_heap_oob_read.bin Found-by: akshay jain Signed-off-by: Michael Niedermayer --- libavcodec/cbs_h266_syntax_template.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libavcodec/cbs_h266_syntax_template.c b/libavcodec/cbs_h266_syntax_template.c index d33240e7df..0ff7459f5c 100644 --- a/libavcodec/cbs_h266_syntax_template.c +++ b/libavcodec/cbs_h266_syntax_template.c @@ -1973,14 +1973,14 @@ static int FUNC(pps) (CodedBitstreamContext *ctx, RWContext *rw, tile_y = tile_idx / current->num_tile_columns; if (tile_x != current->num_tile_columns - 1) { ues(pps_slice_width_in_tiles_minus1[i], - 0, current->num_tile_columns - 1, 1, i); + 0, current->num_tile_columns - 1 - tile_x, 1, i); } else { infer(pps_slice_width_in_tiles_minus1[i], 0); } if (tile_y != current->num_tile_rows - 1 && (current->pps_tile_idx_delta_present_flag || tile_x == 0)) { ues(pps_slice_height_in_tiles_minus1[i], - 0, current->num_tile_rows - 1, 1, i); + 0, current->num_tile_rows - 1 - tile_y, 1, i); } else { if (tile_y == current->num_tile_rows - 1) infer(pps_slice_height_in_tiles_minus1[i], 0);