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 22b96de803 avcodec/dovi_rpudec: strip zero padding
22b96de803 is described below

commit 22b96de8034f5441f0e407184269c60310f0142a
Author:     Kacper Michajłow <[email protected]>
AuthorDate: Thu Sep 10 12:57:13 2026 +0200
Commit:     Kacper Michajłow <[email protected]>
CommitDate: Thu Sep 10 13:08:54 2026 +0200

    avcodec/dovi_rpudec: strip zero padding
    
    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 remaining 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;

-- 
To stop receiving notification emails like this one, please contact
[email protected].
_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to