aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNuo Mi <nuomi2021@gmail.com>2024-11-23 17:32:38 +0800
committerNuo Mi <nuomi2021@gmail.com>2024-11-30 09:58:59 +0800
commit4de67e874697271e189022b03cd619329d54603c (patch)
tree655afef9076c322ee709d5971eb447674fd1cdb8
parenteb67e60cb004c17ecbbd43c6e3c6732c19de5d33 (diff)
downloadffmpeg-4de67e874697271e189022b03cd619329d54603c.tar.gz
avcodec/vvcdec: return error if CTU size > 128
The v3 spec reserves CTU size 256. Currently, we use an uint8_t* table to hold cb_width and cb_height. If a CTU size of 256 is not split, cb_width and cb_height will overflow to 0. To avoid switching to uint16_t, rejecting CTU size 256 provides a simple solution.
-rw-r--r--libavcodec/vvc/ps.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/libavcodec/vvc/ps.c b/libavcodec/vvc/ps.c
index f32f1cc5a1..14cedfd1b3 100644
--- a/libavcodec/vvc/ps.c
+++ b/libavcodec/vvc/ps.c
@@ -649,6 +649,12 @@ static int decode_ps(VVCParamSets *ps, const CodedBitstreamH266Context *h266, vo
if (ret < 0)
return ret;
+ if (rsps->sps_log2_ctu_size_minus5 > 2) {
+ // CTU > 128 are reserved in vvc spec v3
+ av_log(log_ctx, AV_LOG_ERROR, "CTU size > 128. \n");
+ return AVERROR_PATCHWELCOME;
+ }
+
ret = decode_pps(ps, rpps);
if (ret < 0)
return ret;