avcodec/agm: Do not crash on invalid codes
authorMichael Niedermayer <michael@niedermayer.cc>
Sun, 21 Apr 2019 09:05:17 +0000 (11:05 +0200)
committerMichael Niedermayer <michael@niedermayer.cc>
Sun, 21 Apr 2019 21:29:04 +0000 (23:29 +0200)
I do not know if such vlc trees are allowed in agm, I have no specification
So i do not know if these should be treated as error, or not.
But the code does contain a check for idx < 0 already ...

Fixes: Stack-buffer-overflow in get_tree_codes
Fixes: 14189/clusterfuzz-testcase-minimized-ffmpeg_AV_CODEC_ID_AGM_fuzzer-5745747003179008

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
libavcodec/agm.c

index f5fd5d0..f3d81bf 100644 (file)
@@ -913,7 +913,7 @@ static void get_tree_codes(uint32_t *codes, Node *nodes, int idx, uint32_t pfx,
 {
     if (idx < 256 && idx >= 0) {
         codes[idx] = pfx;
-    } else {
+    } else if (idx >= 0) {
         get_tree_codes(codes, nodes, nodes[idx].child[0], pfx + (0 << bitpos), bitpos + 1);
         get_tree_codes(codes, nodes, nodes[idx].child[1], pfx + (1 << bitpos), bitpos + 1);
     }