PR #24440 opened by Kacper Michajłow (kasper93) URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24440 Patch URL: https://code.ffmpeg.org/FFmpeg/FFmpeg/pulls/24440.patch
ef167512ab changed to parse RPU forward as far as we can go, but also removed zero padding trimming, so the ext block size check on files with big padding could trigger now. Restore the trailing zero strip. Note that this does care only about zero padded NALs, while we have seen some files with garbage padding, they are not considered here. The only real way to find the end of RPU is to compute CRC32, as the 0x80 byte may be ambiguous. But we don't want that, and most (all) files don't need that. Also adjust the ext block size remaing size check to minimal possible (block with 0 size). Fixes: https://code.ffmpeg.org/FFmpeg/FFmpeg/issues/24428 From 56865ff09686e2ce2fa000d8364c1d98c97f6535 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kacper=20Michaj=C5=82ow?= <[email protected]> Date: Thu, 10 Sep 2026 12:57:13 +0200 Subject: [PATCH] avcodec/dovi_rpudec: strip zero padding MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ef167512ab changed to parse RPU forward as far as we can go, but also removed zero padding trimming, so the ext block size check on files with big padding could trigger now. Restore the trailing zero strip. Note that this does care only about zero padded NALs, while we have seen some files with garbage padding, they are not considered here. The only real way to find the end of RPU is to compute CRC32, as the 0x80 byte may be ambiguous. But we don't want that, and most (all) files don't need that. Also adjust the ext block size remaing size check to minimal possible (block with 0 size). Fixes: https://code.ffmpeg.org/FFmpeg/FFmpeg/issues/24428 Signed-off-by: Kacper Michajłow <[email protected]> --- libavcodec/dovi_rpudec.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/libavcodec/dovi_rpudec.c b/libavcodec/dovi_rpudec.c index d0374f6717..79717f605f 100644 --- a/libavcodec/dovi_rpudec.c +++ b/libavcodec/dovi_rpudec.c @@ -405,6 +405,9 @@ int ff_dovi_rpu_parse(DOVIContext *s, const uint8_t *rpu, size_t rpu_size, VALIDATE(rpu[0], 25, 25); /* NAL prefix */ rpu++; rpu_size--; + /* Strip trailing padding zero bytes */ + while (rpu_size && !rpu[rpu_size - 1]) + rpu_size--; } if ((ret = init_get_bits8(gb, rpu, rpu_size)) < 0) @@ -710,7 +713,8 @@ int ff_dovi_rpu_parse(DOVIContext *s, const uint8_t *rpu, size_t rpu_size, return ret; } - if (get_bits_left(gb) > 48 /* padding + CRC32 + terminator */) { + /* ue(1) + ue(0) + level + CRC32 + terminator */ + if (get_bits_left(gb) >= 3 + 1 + 8 + 32 + 8) { if ((ret = parse_ext_blocks(s, gb, 2, dm_compression, err_recognition)) < 0) { ff_dovi_ctx_unref(s); return ret; -- 2.52.0 _______________________________________________ ffmpeg-devel mailing list -- [email protected] To unsubscribe send an email to [email protected]
