]> git.sesse.net Git - ffmpeg/commitdiff
Merge commit '0ccddbad200c1d9439c5a836501917d515cddf76'
authorJames Almer <jamrial@gmail.com>
Sun, 12 Nov 2017 04:13:07 +0000 (01:13 -0300)
committerJames Almer <jamrial@gmail.com>
Sun, 12 Nov 2017 04:13:07 +0000 (01:13 -0300)
* commit '0ccddbad200c1d9439c5a836501917d515cddf76':
  smacker: limit recursion depth of smacker_decode_bigtree

See 946ecd19ea752399bccc751c9339ff74b815587e

Merged-by: James Almer <jamrial@gmail.com>
1  2 
libavcodec/smacker.c

index 2077dde4a1803bbc5b5d20357a73f26553d3a022,636e3b48e3133818296332c4b3c5b22595d81c7e..61e316916bf20319f0a61be1f04561cd2f85bffe
@@@ -42,8 -42,9 +42,9 @@@
  
  #define SMKTREE_BITS 9
  #define SMK_NODE 0x80000000
 +
  #define SMKTREE_DECODE_MAX_RECURSION 32
+ #define SMKTREE_DECODE_BIG_MAX_RECURSION 500
  
  typedef struct SmackVContext {
      AVCodecContext *avctx;
@@@ -131,12 -133,15 +132,15 @@@ static int smacker_decode_tree(GetBitCo
  /**
   * Decode header tree
   */
- static int smacker_decode_bigtree(GetBitContext *gb, HuffContext *hc, DBCtx *ctx, int length)
 -static int smacker_decode_bigtree(BitstreamContext *bc, HuffContext *hc,
++static int smacker_decode_bigtree(GetBitContext *gb, HuffContext *hc,
+                                   DBCtx *ctx, int length)
  {
-     if(length > 500) { // Larger length can cause segmentation faults due to too deep recursion.
-         av_log(NULL, AV_LOG_ERROR, "length too long\n");
+     // Larger length can cause segmentation faults due to too deep recursion.
+     if (length > SMKTREE_DECODE_BIG_MAX_RECURSION) {
+         av_log(NULL, AV_LOG_ERROR, "Maximum bigtree recursion level exceeded.\n");
          return AVERROR_INVALIDDATA;
      }
      if (hc->current + 1 >= hc->length) {
          av_log(NULL, AV_LOG_ERROR, "Tree size exceeded!\n");
          return AVERROR_INVALIDDATA;