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

@@@ -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;