zstdlib 0.12.0-x64-mingw32 → 0.13.0-x64-mingw32
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGES.md +7 -0
- data/Rakefile +1 -1
- data/ext/zstdlib_c/extconf.rb +1 -1
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/allocations.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/bitstream.h +49 -29
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/compiler.h +114 -22
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/cpu.h +36 -0
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/debug.c +6 -0
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/debug.h +20 -11
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/error_private.h +45 -36
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/fse.h +3 -2
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/fse_decompress.c +19 -17
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/huf.h +14 -1
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/mem.h +0 -9
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/pool.c +1 -1
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/pool.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/portability_macros.h +2 -0
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/threading.c +8 -2
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/xxhash.c +5 -11
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/xxhash.h +2341 -1007
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/zstd_internal.h +5 -5
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/fse_compress.c +8 -7
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/huf_compress.c +54 -25
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_compress.c +282 -161
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_compress_internal.h +29 -27
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_compress_superblock.c +224 -113
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_cwksp.h +19 -13
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_double_fast.c +17 -5
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_double_fast.h +11 -0
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_fast.c +14 -6
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_lazy.c +129 -87
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_lazy.h +103 -28
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_ldm.c +8 -2
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_opt.c +216 -112
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_opt.h +31 -7
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstdmt_compress.c +94 -79
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/decompress/huf_decompress.c +188 -126
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/decompress/huf_decompress_amd64.S +38 -19
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/decompress/zstd_decompress.c +84 -32
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/decompress/zstd_decompress_block.c +231 -208
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/decompress/zstd_decompress_block.h +1 -1
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/decompress/zstd_decompress_internal.h +2 -0
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/zstd.h +129 -60
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/zlibWrapper/gzclose.c +1 -3
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/zlibWrapper/gzlib.c +20 -73
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/zlibWrapper/gzread.c +17 -58
- data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/zlibWrapper/gzwrite.c +18 -58
- data/lib/2.4/zstdlib_c.so +0 -0
- data/lib/2.5/zstdlib_c.so +0 -0
- data/lib/2.6/zstdlib_c.so +0 -0
- data/lib/2.7/zstdlib_c.so +0 -0
- data/lib/3.0/zstdlib_c.so +0 -0
- metadata +75 -75
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/bits.h +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/entropy_common.c +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/error_private.c +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/threading.h +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/zstd_common.c +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/zstd_deps.h +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/common/zstd_trace.h +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/clevels.h +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/hist.c +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/hist.h +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_compress_literals.c +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_compress_literals.h +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_compress_sequences.c +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_compress_sequences.h +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_compress_superblock.h +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_fast.h +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_ldm.h +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstd_ldm_geartab.h +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/compress/zstdmt_compress.h +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/decompress/zstd_ddict.c +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/decompress/zstd_ddict.h +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/zdict.h +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/lib/zstd_errors.h +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/zlibWrapper/gzcompatibility.h +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/zlibWrapper/gzguts.h +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/zlibWrapper/zstd_zlibwrapper.c +0 -0
- /data/ext/zstdlib_c/{zstd-1.5.5 → zstd-1.5.6}/zlibWrapper/zstd_zlibwrapper.h +0 -0
| @@ -10,11 +10,32 @@ | |
| 10 10 |  | 
| 11 11 | 
             
            #include "../common/portability_macros.h"
         | 
| 12 12 |  | 
| 13 | 
            +
            #if defined(__ELF__) && defined(__GNUC__)
         | 
| 13 14 | 
             
            /* Stack marking
         | 
| 14 15 | 
             
             * ref: https://wiki.gentoo.org/wiki/Hardened/GNU_stack_quickstart
         | 
| 15 16 | 
             
             */
         | 
| 16 | 
            -
            #if defined(__ELF__) && defined(__GNUC__)
         | 
| 17 17 | 
             
            .section .note.GNU-stack,"",%progbits
         | 
| 18 | 
            +
             | 
| 19 | 
            +
            #if defined(__aarch64__)
         | 
| 20 | 
            +
            /* Mark that this assembly supports BTI & PAC, because it is empty for aarch64.
         | 
| 21 | 
            +
             * See: https://github.com/facebook/zstd/issues/3841
         | 
| 22 | 
            +
             * See: https://gcc.godbolt.org/z/sqr5T4ffK
         | 
| 23 | 
            +
             * See: https://lore.kernel.org/linux-arm-kernel/20200429211641.9279-8-broonie@kernel.org/
         | 
| 24 | 
            +
             * See: https://reviews.llvm.org/D62609
         | 
| 25 | 
            +
             */
         | 
| 26 | 
            +
            .pushsection .note.gnu.property, "a"
         | 
| 27 | 
            +
            .p2align 3
         | 
| 28 | 
            +
            .long 4                 /* size of the name - "GNU\0" */
         | 
| 29 | 
            +
            .long 0x10              /* size of descriptor */
         | 
| 30 | 
            +
            .long 0x5               /* NT_GNU_PROPERTY_TYPE_0 */
         | 
| 31 | 
            +
            .asciz "GNU"
         | 
| 32 | 
            +
            .long 0xc0000000        /* pr_type - GNU_PROPERTY_AARCH64_FEATURE_1_AND */
         | 
| 33 | 
            +
            .long 4                 /* pr_datasz - 4 bytes */
         | 
| 34 | 
            +
            .long 3                 /* pr_data - GNU_PROPERTY_AARCH64_FEATURE_1_BTI | GNU_PROPERTY_AARCH64_FEATURE_1_PAC */
         | 
| 35 | 
            +
            .p2align 3              /* pr_padding - bring everything to 8 byte alignment */
         | 
| 36 | 
            +
            .popsection
         | 
| 37 | 
            +
            #endif
         | 
| 38 | 
            +
             | 
| 18 39 | 
             
            #endif
         | 
| 19 40 |  | 
| 20 41 | 
             
            #if ZSTD_ENABLE_ASM_X86_64_BMI2
         | 
| @@ -131,7 +152,7 @@ HUF_decompress4X1_usingDTable_internal_fast_asm_loop: | |
| 131 152 | 
             
                movq 88(%rax), %bits3
         | 
| 132 153 | 
             
                movq 96(%rax), %dtable
         | 
| 133 154 | 
             
                push %rax      /* argument */
         | 
| 134 | 
            -
                push 104(%rax) /*  | 
| 155 | 
            +
                push 104(%rax) /* ilowest */
         | 
| 135 156 | 
             
                push 112(%rax) /* oend */
         | 
| 136 157 | 
             
                push %olimit   /* olimit space */
         | 
| 137 158 |  | 
| @@ -156,11 +177,11 @@ HUF_decompress4X1_usingDTable_internal_fast_asm_loop: | |
| 156 177 | 
             
                shrq $2, %r15
         | 
| 157 178 |  | 
| 158 179 | 
             
                movq %ip0,     %rax /* rax = ip0 */
         | 
| 159 | 
            -
                movq 40(%rsp), %rdx /* rdx =  | 
| 160 | 
            -
                subq %rdx,     %rax /* rax = ip0 -  | 
| 161 | 
            -
                movq %rax,     %rbx /* rbx = ip0 -  | 
| 180 | 
            +
                movq 40(%rsp), %rdx /* rdx = ilowest */
         | 
| 181 | 
            +
                subq %rdx,     %rax /* rax = ip0 - ilowest */
         | 
| 182 | 
            +
                movq %rax,     %rbx /* rbx = ip0 - ilowest */
         | 
| 162 183 |  | 
| 163 | 
            -
                /* rdx = (ip0 -  | 
| 184 | 
            +
                /* rdx = (ip0 - ilowest) / 7 */
         | 
| 164 185 | 
             
                movabsq $2635249153387078803, %rdx
         | 
| 165 186 | 
             
                mulq %rdx
         | 
| 166 187 | 
             
                subq %rdx, %rbx
         | 
| @@ -183,9 +204,8 @@ HUF_decompress4X1_usingDTable_internal_fast_asm_loop: | |
| 183 204 |  | 
| 184 205 | 
             
                /* If (op3 + 20 > olimit) */
         | 
| 185 206 | 
             
                movq %op3, %rax    /* rax = op3 */
         | 
| 186 | 
            -
                 | 
| 187 | 
            -
                 | 
| 188 | 
            -
                jb .L_4X1_exit
         | 
| 207 | 
            +
                cmpq %rax, %olimit /* op3 == olimit */
         | 
| 208 | 
            +
                je .L_4X1_exit
         | 
| 189 209 |  | 
| 190 210 | 
             
                /* If (ip1 < ip0) go to exit */
         | 
| 191 211 | 
             
                cmpq %ip0, %ip1
         | 
| @@ -316,7 +336,7 @@ HUF_decompress4X1_usingDTable_internal_fast_asm_loop: | |
| 316 336 | 
             
                /* Restore stack (oend & olimit) */
         | 
| 317 337 | 
             
                pop %rax /* olimit */
         | 
| 318 338 | 
             
                pop %rax /* oend */
         | 
| 319 | 
            -
                pop %rax /*  | 
| 339 | 
            +
                pop %rax /* ilowest */
         | 
| 320 340 | 
             
                pop %rax /* arg */
         | 
| 321 341 |  | 
| 322 342 | 
             
                /* Save ip / op / bits */
         | 
| @@ -387,7 +407,7 @@ HUF_decompress4X2_usingDTable_internal_fast_asm_loop: | |
| 387 407 | 
             
                movq 96(%rax), %dtable
         | 
| 388 408 | 
             
                push %rax      /* argument */
         | 
| 389 409 | 
             
                push %rax      /* olimit */
         | 
| 390 | 
            -
                push 104(%rax) /*  | 
| 410 | 
            +
                push 104(%rax) /* ilowest */
         | 
| 391 411 |  | 
| 392 412 | 
             
                movq 112(%rax), %rax
         | 
| 393 413 | 
             
                push %rax /* oend3 */
         | 
| @@ -414,9 +434,9 @@ HUF_decompress4X2_usingDTable_internal_fast_asm_loop: | |
| 414 434 |  | 
| 415 435 | 
             
                /* We can consume up to 7 input bytes each iteration. */
         | 
| 416 436 | 
             
                movq %ip0,     %rax  /* rax = ip0 */
         | 
| 417 | 
            -
                movq 40(%rsp), %rdx  /* rdx =  | 
| 418 | 
            -
                subq %rdx,     %rax  /* rax = ip0 -  | 
| 419 | 
            -
                movq %rax,    %r15   /* r15 = ip0 -  | 
| 437 | 
            +
                movq 40(%rsp), %rdx  /* rdx = ilowest */
         | 
| 438 | 
            +
                subq %rdx,     %rax  /* rax = ip0 - ilowest */
         | 
| 439 | 
            +
                movq %rax,    %r15   /* r15 = ip0 - ilowest */
         | 
| 420 440 |  | 
| 421 441 | 
             
                /* rdx = rax / 7 */
         | 
| 422 442 | 
             
                movabsq $2635249153387078803, %rdx
         | 
| @@ -426,7 +446,7 @@ HUF_decompress4X2_usingDTable_internal_fast_asm_loop: | |
| 426 446 | 
             
                addq %r15, %rdx
         | 
| 427 447 | 
             
                shrq $2, %rdx
         | 
| 428 448 |  | 
| 429 | 
            -
                /* r15 = (ip0 -  | 
| 449 | 
            +
                /* r15 = (ip0 - ilowest) / 7 */
         | 
| 430 450 | 
             
                movq %rdx, %r15
         | 
| 431 451 |  | 
| 432 452 | 
             
                /* r15 = min(r15, min(oend0 - op0, oend1 - op1, oend2 - op2, oend3 - op3) / 10) */
         | 
| @@ -467,9 +487,8 @@ HUF_decompress4X2_usingDTable_internal_fast_asm_loop: | |
| 467 487 |  | 
| 468 488 | 
             
                /* If (op3 + 10 > olimit) */
         | 
| 469 489 | 
             
                movq %op3, %rax    /* rax = op3 */
         | 
| 470 | 
            -
                 | 
| 471 | 
            -
                 | 
| 472 | 
            -
                jb .L_4X2_exit
         | 
| 490 | 
            +
                cmpq %rax, %olimit /* op3 == olimit */
         | 
| 491 | 
            +
                je .L_4X2_exit
         | 
| 473 492 |  | 
| 474 493 | 
             
                /* If (ip1 < ip0) go to exit */
         | 
| 475 494 | 
             
                cmpq %ip0, %ip1
         | 
| @@ -537,7 +556,7 @@ HUF_decompress4X2_usingDTable_internal_fast_asm_loop: | |
| 537 556 | 
             
                pop %rax /* oend1 */
         | 
| 538 557 | 
             
                pop %rax /* oend2 */
         | 
| 539 558 | 
             
                pop %rax /* oend3 */
         | 
| 540 | 
            -
                pop %rax /*  | 
| 559 | 
            +
                pop %rax /* ilowest */
         | 
| 541 560 | 
             
                pop %rax /* olimit */
         | 
| 542 561 | 
             
                pop %rax /* arg */
         | 
| 543 562 |  | 
| @@ -55,18 +55,19 @@ | |
| 55 55 | 
             
            /*-*******************************************************
         | 
| 56 56 | 
             
            *  Dependencies
         | 
| 57 57 | 
             
            *********************************************************/
         | 
| 58 | 
            -
            #include "../common/allocations.h"  /* ZSTD_customMalloc, ZSTD_customCalloc, ZSTD_customFree */
         | 
| 59 58 | 
             
            #include "../common/zstd_deps.h"   /* ZSTD_memcpy, ZSTD_memmove, ZSTD_memset */
         | 
| 59 | 
            +
            #include "../common/allocations.h"  /* ZSTD_customMalloc, ZSTD_customCalloc, ZSTD_customFree */
         | 
| 60 | 
            +
            #include "../common/error_private.h"
         | 
| 61 | 
            +
            #include "../common/zstd_internal.h"  /* blockProperties_t */
         | 
| 60 62 | 
             
            #include "../common/mem.h"         /* low level memory routines */
         | 
| 63 | 
            +
            #include "../common/bits.h"  /* ZSTD_highbit32 */
         | 
| 61 64 | 
             
            #define FSE_STATIC_LINKING_ONLY
         | 
| 62 65 | 
             
            #include "../common/fse.h"
         | 
| 63 66 | 
             
            #include "../common/huf.h"
         | 
| 64 67 | 
             
            #include "../common/xxhash.h" /* XXH64_reset, XXH64_update, XXH64_digest, XXH64 */
         | 
| 65 | 
            -
            #include "../common/zstd_internal.h"  /* blockProperties_t */
         | 
| 66 68 | 
             
            #include "zstd_decompress_internal.h"   /* ZSTD_DCtx */
         | 
| 67 69 | 
             
            #include "zstd_ddict.h"  /* ZSTD_DDictDictContent */
         | 
| 68 70 | 
             
            #include "zstd_decompress_block.h"   /* ZSTD_decompressBlock_internal */
         | 
| 69 | 
            -
            #include "../common/bits.h"  /* ZSTD_highbit32 */
         | 
| 70 71 |  | 
| 71 72 | 
             
            #if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT>=1)
         | 
| 72 73 | 
             
            #  include "../legacy/zstd_legacy.h"
         | 
| @@ -245,6 +246,7 @@ static void ZSTD_DCtx_resetParameters(ZSTD_DCtx* dctx) | |
| 245 246 | 
             
                dctx->forceIgnoreChecksum = ZSTD_d_validateChecksum;
         | 
| 246 247 | 
             
                dctx->refMultipleDDicts = ZSTD_rmd_refSingleDDict;
         | 
| 247 248 | 
             
                dctx->disableHufAsm = 0;
         | 
| 249 | 
            +
                dctx->maxBlockSizeParam = 0;
         | 
| 248 250 | 
             
            }
         | 
| 249 251 |  | 
| 250 252 | 
             
            static void ZSTD_initDCtx_internal(ZSTD_DCtx* dctx)
         | 
| @@ -265,6 +267,7 @@ static void ZSTD_initDCtx_internal(ZSTD_DCtx* dctx) | |
| 265 267 | 
             
            #endif
         | 
| 266 268 | 
             
                dctx->noForwardProgress = 0;
         | 
| 267 269 | 
             
                dctx->oversizedDuration = 0;
         | 
| 270 | 
            +
                dctx->isFrameDecompression = 1;
         | 
| 268 271 | 
             
            #if DYNAMIC_BMI2
         | 
| 269 272 | 
             
                dctx->bmi2 = ZSTD_cpuSupportsBmi2();
         | 
| 270 273 | 
             
            #endif
         | 
| @@ -726,17 +729,17 @@ static ZSTD_frameSizeInfo ZSTD_errorFrameSizeInfo(size_t ret) | |
| 726 729 | 
             
                return frameSizeInfo;
         | 
| 727 730 | 
             
            }
         | 
| 728 731 |  | 
| 729 | 
            -
            static ZSTD_frameSizeInfo ZSTD_findFrameSizeInfo(const void* src, size_t srcSize)
         | 
| 732 | 
            +
            static ZSTD_frameSizeInfo ZSTD_findFrameSizeInfo(const void* src, size_t srcSize, ZSTD_format_e format)
         | 
| 730 733 | 
             
            {
         | 
| 731 734 | 
             
                ZSTD_frameSizeInfo frameSizeInfo;
         | 
| 732 735 | 
             
                ZSTD_memset(&frameSizeInfo, 0, sizeof(ZSTD_frameSizeInfo));
         | 
| 733 736 |  | 
| 734 737 | 
             
            #if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT >= 1)
         | 
| 735 | 
            -
                if (ZSTD_isLegacy(src, srcSize))
         | 
| 738 | 
            +
                if (format == ZSTD_f_zstd1 && ZSTD_isLegacy(src, srcSize))
         | 
| 736 739 | 
             
                    return ZSTD_findFrameSizeInfoLegacy(src, srcSize);
         | 
| 737 740 | 
             
            #endif
         | 
| 738 741 |  | 
| 739 | 
            -
                if ((srcSize >= ZSTD_SKIPPABLEHEADERSIZE)
         | 
| 742 | 
            +
                if (format == ZSTD_f_zstd1 && (srcSize >= ZSTD_SKIPPABLEHEADERSIZE)
         | 
| 740 743 | 
             
                    && (MEM_readLE32(src) & ZSTD_MAGIC_SKIPPABLE_MASK) == ZSTD_MAGIC_SKIPPABLE_START) {
         | 
| 741 744 | 
             
                    frameSizeInfo.compressedSize = readSkippableFrameSize(src, srcSize);
         | 
| 742 745 | 
             
                    assert(ZSTD_isError(frameSizeInfo.compressedSize) ||
         | 
| @@ -750,7 +753,7 @@ static ZSTD_frameSizeInfo ZSTD_findFrameSizeInfo(const void* src, size_t srcSize | |
| 750 753 | 
             
                    ZSTD_frameHeader zfh;
         | 
| 751 754 |  | 
| 752 755 | 
             
                    /* Extract Frame Header */
         | 
| 753 | 
            -
                    {   size_t const ret =  | 
| 756 | 
            +
                    {   size_t const ret = ZSTD_getFrameHeader_advanced(&zfh, src, srcSize, format);
         | 
| 754 757 | 
             
                        if (ZSTD_isError(ret))
         | 
| 755 758 | 
             
                            return ZSTD_errorFrameSizeInfo(ret);
         | 
| 756 759 | 
             
                        if (ret > 0)
         | 
| @@ -793,15 +796,17 @@ static ZSTD_frameSizeInfo ZSTD_findFrameSizeInfo(const void* src, size_t srcSize | |
| 793 796 | 
             
                }
         | 
| 794 797 | 
             
            }
         | 
| 795 798 |  | 
| 799 | 
            +
            static size_t ZSTD_findFrameCompressedSize_advanced(const void *src, size_t srcSize, ZSTD_format_e format) {
         | 
| 800 | 
            +
                ZSTD_frameSizeInfo const frameSizeInfo = ZSTD_findFrameSizeInfo(src, srcSize, format);
         | 
| 801 | 
            +
                return frameSizeInfo.compressedSize;
         | 
| 802 | 
            +
            }
         | 
| 803 | 
            +
             | 
| 796 804 | 
             
            /** ZSTD_findFrameCompressedSize() :
         | 
| 797 | 
            -
             * | 
| 798 | 
            -
             * | 
| 799 | 
            -
             *  `srcSize` must be at least as large as the frame contained
         | 
| 800 | 
            -
             *  @return : the compressed size of the frame starting at `src` */
         | 
| 805 | 
            +
             * See docs in zstd.h
         | 
| 806 | 
            +
             * Note: compatible with legacy mode */
         | 
| 801 807 | 
             
            size_t ZSTD_findFrameCompressedSize(const void *src, size_t srcSize)
         | 
| 802 808 | 
             
            {
         | 
| 803 | 
            -
                 | 
| 804 | 
            -
                return frameSizeInfo.compressedSize;
         | 
| 809 | 
            +
                return ZSTD_findFrameCompressedSize_advanced(src, srcSize, ZSTD_f_zstd1);
         | 
| 805 810 | 
             
            }
         | 
| 806 811 |  | 
| 807 812 | 
             
            /** ZSTD_decompressBound() :
         | 
| @@ -815,7 +820,7 @@ unsigned long long ZSTD_decompressBound(const void* src, size_t srcSize) | |
| 815 820 | 
             
                unsigned long long bound = 0;
         | 
| 816 821 | 
             
                /* Iterate over each frame */
         | 
| 817 822 | 
             
                while (srcSize > 0) {
         | 
| 818 | 
            -
                    ZSTD_frameSizeInfo const frameSizeInfo = ZSTD_findFrameSizeInfo(src, srcSize);
         | 
| 823 | 
            +
                    ZSTD_frameSizeInfo const frameSizeInfo = ZSTD_findFrameSizeInfo(src, srcSize, ZSTD_f_zstd1);
         | 
| 819 824 | 
             
                    size_t const compressedSize = frameSizeInfo.compressedSize;
         | 
| 820 825 | 
             
                    unsigned long long const decompressedBound = frameSizeInfo.decompressedBound;
         | 
| 821 826 | 
             
                    if (ZSTD_isError(compressedSize) || decompressedBound == ZSTD_CONTENTSIZE_ERROR)
         | 
| @@ -835,7 +840,7 @@ size_t ZSTD_decompressionMargin(void const* src, size_t srcSize) | |
| 835 840 |  | 
| 836 841 | 
             
                /* Iterate over each frame */
         | 
| 837 842 | 
             
                while (srcSize > 0) {
         | 
| 838 | 
            -
                    ZSTD_frameSizeInfo const frameSizeInfo = ZSTD_findFrameSizeInfo(src, srcSize);
         | 
| 843 | 
            +
                    ZSTD_frameSizeInfo const frameSizeInfo = ZSTD_findFrameSizeInfo(src, srcSize, ZSTD_f_zstd1);
         | 
| 839 844 | 
             
                    size_t const compressedSize = frameSizeInfo.compressedSize;
         | 
| 840 845 | 
             
                    unsigned long long const decompressedBound = frameSizeInfo.decompressedBound;
         | 
| 841 846 | 
             
                    ZSTD_frameHeader zfh;
         | 
| @@ -971,6 +976,10 @@ static size_t ZSTD_decompressFrame(ZSTD_DCtx* dctx, | |
| 971 976 | 
             
                    ip += frameHeaderSize; remainingSrcSize -= frameHeaderSize;
         | 
| 972 977 | 
             
                }
         | 
| 973 978 |  | 
| 979 | 
            +
                /* Shrink the blockSizeMax if enabled */
         | 
| 980 | 
            +
                if (dctx->maxBlockSizeParam != 0)
         | 
| 981 | 
            +
                    dctx->fParams.blockSizeMax = MIN(dctx->fParams.blockSizeMax, (unsigned)dctx->maxBlockSizeParam);
         | 
| 982 | 
            +
             | 
| 974 983 | 
             
                /* Loop on each block */
         | 
| 975 984 | 
             
                while (1) {
         | 
| 976 985 | 
             
                    BYTE* oBlockEnd = oend;
         | 
| @@ -1003,7 +1012,8 @@ static size_t ZSTD_decompressFrame(ZSTD_DCtx* dctx, | |
| 1003 1012 | 
             
                    switch(blockProperties.blockType)
         | 
| 1004 1013 | 
             
                    {
         | 
| 1005 1014 | 
             
                    case bt_compressed:
         | 
| 1006 | 
            -
                         | 
| 1015 | 
            +
                        assert(dctx->isFrameDecompression == 1);
         | 
| 1016 | 
            +
                        decodedSize = ZSTD_decompressBlock_internal(dctx, op, (size_t)(oBlockEnd-op), ip, cBlockSize, not_streaming);
         | 
| 1007 1017 | 
             
                        break;
         | 
| 1008 1018 | 
             
                    case bt_raw :
         | 
| 1009 1019 | 
             
                        /* Use oend instead of oBlockEnd because this function is safe to overlap. It uses memmove. */
         | 
| @@ -1016,12 +1026,14 @@ static size_t ZSTD_decompressFrame(ZSTD_DCtx* dctx, | |
| 1016 1026 | 
             
                    default:
         | 
| 1017 1027 | 
             
                        RETURN_ERROR(corruption_detected, "invalid block type");
         | 
| 1018 1028 | 
             
                    }
         | 
| 1019 | 
            -
             | 
| 1020 | 
            -
                     | 
| 1021 | 
            -
                    if (dctx->validateChecksum)
         | 
| 1029 | 
            +
                    FORWARD_IF_ERROR(decodedSize, "Block decompression failure");
         | 
| 1030 | 
            +
                    DEBUGLOG(5, "Decompressed block of dSize = %u", (unsigned)decodedSize);
         | 
| 1031 | 
            +
                    if (dctx->validateChecksum) {
         | 
| 1022 1032 | 
             
                        XXH64_update(&dctx->xxhState, op, decodedSize);
         | 
| 1023 | 
            -
                     | 
| 1033 | 
            +
                    }
         | 
| 1034 | 
            +
                    if (decodedSize) /* support dst = NULL,0 */ {
         | 
| 1024 1035 | 
             
                        op += decodedSize;
         | 
| 1036 | 
            +
                    }
         | 
| 1025 1037 | 
             
                    assert(ip != NULL);
         | 
| 1026 1038 | 
             
                    ip += cBlockSize;
         | 
| 1027 1039 | 
             
                    remainingSrcSize -= cBlockSize;
         | 
| @@ -1051,7 +1063,9 @@ static size_t ZSTD_decompressFrame(ZSTD_DCtx* dctx, | |
| 1051 1063 | 
             
                return (size_t)(op-ostart);
         | 
| 1052 1064 | 
             
            }
         | 
| 1053 1065 |  | 
| 1054 | 
            -
            static | 
| 1066 | 
            +
            static
         | 
| 1067 | 
            +
            ZSTD_ALLOW_POINTER_OVERFLOW_ATTR
         | 
| 1068 | 
            +
            size_t ZSTD_decompressMultiFrame(ZSTD_DCtx* dctx,
         | 
| 1055 1069 | 
             
                                                    void* dst, size_t dstCapacity,
         | 
| 1056 1070 | 
             
                                              const void* src, size_t srcSize,
         | 
| 1057 1071 | 
             
                                              const void* dict, size_t dictSize,
         | 
| @@ -1071,7 +1085,7 @@ static size_t ZSTD_decompressMultiFrame(ZSTD_DCtx* dctx, | |
| 1071 1085 | 
             
                while (srcSize >= ZSTD_startingInputLength(dctx->format)) {
         | 
| 1072 1086 |  | 
| 1073 1087 | 
             
            #if defined(ZSTD_LEGACY_SUPPORT) && (ZSTD_LEGACY_SUPPORT >= 1)
         | 
| 1074 | 
            -
                    if (ZSTD_isLegacy(src, srcSize)) {
         | 
| 1088 | 
            +
                    if (dctx->format == ZSTD_f_zstd1 && ZSTD_isLegacy(src, srcSize)) {
         | 
| 1075 1089 | 
             
                        size_t decodedSize;
         | 
| 1076 1090 | 
             
                        size_t const frameSize = ZSTD_findFrameCompressedSizeLegacy(src, srcSize);
         | 
| 1077 1091 | 
             
                        if (ZSTD_isError(frameSize)) return frameSize;
         | 
| @@ -1081,6 +1095,15 @@ static size_t ZSTD_decompressMultiFrame(ZSTD_DCtx* dctx, | |
| 1081 1095 | 
             
                        decodedSize = ZSTD_decompressLegacy(dst, dstCapacity, src, frameSize, dict, dictSize);
         | 
| 1082 1096 | 
             
                        if (ZSTD_isError(decodedSize)) return decodedSize;
         | 
| 1083 1097 |  | 
| 1098 | 
            +
                        {
         | 
| 1099 | 
            +
                            unsigned long long const expectedSize = ZSTD_getFrameContentSize(src, srcSize);
         | 
| 1100 | 
            +
                            RETURN_ERROR_IF(expectedSize == ZSTD_CONTENTSIZE_ERROR, corruption_detected, "Corrupted frame header!");
         | 
| 1101 | 
            +
                            if (expectedSize != ZSTD_CONTENTSIZE_UNKNOWN) {
         | 
| 1102 | 
            +
                                RETURN_ERROR_IF(expectedSize != decodedSize, corruption_detected,
         | 
| 1103 | 
            +
                                    "Frame header size does not match decoded size!");
         | 
| 1104 | 
            +
                            }
         | 
| 1105 | 
            +
                        }
         | 
| 1106 | 
            +
             | 
| 1084 1107 | 
             
                        assert(decodedSize <= dstCapacity);
         | 
| 1085 1108 | 
             
                        dst = (BYTE*)dst + decodedSize;
         | 
| 1086 1109 | 
             
                        dstCapacity -= decodedSize;
         | 
| @@ -1092,7 +1115,7 @@ static size_t ZSTD_decompressMultiFrame(ZSTD_DCtx* dctx, | |
| 1092 1115 | 
             
                    }
         | 
| 1093 1116 | 
             
            #endif
         | 
| 1094 1117 |  | 
| 1095 | 
            -
                    if (srcSize >= 4) {
         | 
| 1118 | 
            +
                    if (dctx->format == ZSTD_f_zstd1 && srcSize >= 4) {
         | 
| 1096 1119 | 
             
                        U32 const magicNumber = MEM_readLE32(src);
         | 
| 1097 1120 | 
             
                        DEBUGLOG(5, "reading magic number %08X", (unsigned)magicNumber);
         | 
| 1098 1121 | 
             
                        if ((magicNumber & ZSTD_MAGIC_SKIPPABLE_MASK) == ZSTD_MAGIC_SKIPPABLE_START) {
         | 
| @@ -1319,7 +1342,8 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, c | |
| 1319 1342 | 
             
                        {
         | 
| 1320 1343 | 
             
                        case bt_compressed:
         | 
| 1321 1344 | 
             
                            DEBUGLOG(5, "ZSTD_decompressContinue: case bt_compressed");
         | 
| 1322 | 
            -
                             | 
| 1345 | 
            +
                            assert(dctx->isFrameDecompression == 1);
         | 
| 1346 | 
            +
                            rSize = ZSTD_decompressBlock_internal(dctx, dst, dstCapacity, src, srcSize, is_streaming);
         | 
| 1323 1347 | 
             
                            dctx->expected = 0;  /* Streaming not supported */
         | 
| 1324 1348 | 
             
                            break;
         | 
| 1325 1349 | 
             
                        case bt_raw :
         | 
| @@ -1388,6 +1412,7 @@ size_t ZSTD_decompressContinue(ZSTD_DCtx* dctx, void* dst, size_t dstCapacity, c | |
| 1388 1412 | 
             
                case ZSTDds_decodeSkippableHeader:
         | 
| 1389 1413 | 
             
                    assert(src != NULL);
         | 
| 1390 1414 | 
             
                    assert(srcSize <= ZSTD_SKIPPABLEHEADERSIZE);
         | 
| 1415 | 
            +
                    assert(dctx->format != ZSTD_f_zstd1_magicless);
         | 
| 1391 1416 | 
             
                    ZSTD_memcpy(dctx->headerBuffer + (ZSTD_SKIPPABLEHEADERSIZE - srcSize), src, srcSize);   /* complete skippable header */
         | 
| 1392 1417 | 
             
                    dctx->expected = MEM_readLE32(dctx->headerBuffer + ZSTD_FRAMEIDSIZE);   /* note : dctx->expected can grow seriously large, beyond local buffer size */
         | 
| 1393 1418 | 
             
                    dctx->stage = ZSTDds_skipFrame;
         | 
| @@ -1548,6 +1573,7 @@ size_t ZSTD_decompressBegin(ZSTD_DCtx* dctx) | |
| 1548 1573 | 
             
                dctx->litEntropy = dctx->fseEntropy = 0;
         | 
| 1549 1574 | 
             
                dctx->dictID = 0;
         | 
| 1550 1575 | 
             
                dctx->bType = bt_reserved;
         | 
| 1576 | 
            +
                dctx->isFrameDecompression = 1;
         | 
| 1551 1577 | 
             
                ZSTD_STATIC_ASSERT(sizeof(dctx->entropy.rep) == sizeof(repStartValue));
         | 
| 1552 1578 | 
             
                ZSTD_memcpy(dctx->entropy.rep, repStartValue, sizeof(repStartValue));  /* initial repcodes */
         | 
| 1553 1579 | 
             
                dctx->LLTptr = dctx->entropy.LLTable;
         | 
| @@ -1819,6 +1845,10 @@ ZSTD_bounds ZSTD_dParam_getBounds(ZSTD_dParameter dParam) | |
| 1819 1845 | 
             
                        bounds.lowerBound = 0;
         | 
| 1820 1846 | 
             
                        bounds.upperBound = 1;
         | 
| 1821 1847 | 
             
                        return bounds;
         | 
| 1848 | 
            +
                    case ZSTD_d_maxBlockSize:
         | 
| 1849 | 
            +
                        bounds.lowerBound = ZSTD_BLOCKSIZE_MAX_MIN;
         | 
| 1850 | 
            +
                        bounds.upperBound = ZSTD_BLOCKSIZE_MAX;
         | 
| 1851 | 
            +
                        return bounds;
         | 
| 1822 1852 |  | 
| 1823 1853 | 
             
                    default:;
         | 
| 1824 1854 | 
             
                }
         | 
| @@ -1863,6 +1893,9 @@ size_t ZSTD_DCtx_getParameter(ZSTD_DCtx* dctx, ZSTD_dParameter param, int* value | |
| 1863 1893 | 
             
                    case ZSTD_d_disableHuffmanAssembly:
         | 
| 1864 1894 | 
             
                        *value = (int)dctx->disableHufAsm;
         | 
| 1865 1895 | 
             
                        return 0;
         | 
| 1896 | 
            +
                    case ZSTD_d_maxBlockSize:
         | 
| 1897 | 
            +
                        *value = dctx->maxBlockSizeParam;
         | 
| 1898 | 
            +
                        return 0;
         | 
| 1866 1899 | 
             
                    default:;
         | 
| 1867 1900 | 
             
                }
         | 
| 1868 1901 | 
             
                RETURN_ERROR(parameter_unsupported, "");
         | 
| @@ -1900,6 +1933,10 @@ size_t ZSTD_DCtx_setParameter(ZSTD_DCtx* dctx, ZSTD_dParameter dParam, int value | |
| 1900 1933 | 
             
                        CHECK_DBOUNDS(ZSTD_d_disableHuffmanAssembly, value);
         | 
| 1901 1934 | 
             
                        dctx->disableHufAsm = value != 0;
         | 
| 1902 1935 | 
             
                        return 0;
         | 
| 1936 | 
            +
                    case ZSTD_d_maxBlockSize:
         | 
| 1937 | 
            +
                        if (value != 0) CHECK_DBOUNDS(ZSTD_d_maxBlockSize, value);
         | 
| 1938 | 
            +
                        dctx->maxBlockSizeParam = value;
         | 
| 1939 | 
            +
                        return 0;
         | 
| 1903 1940 | 
             
                    default:;
         | 
| 1904 1941 | 
             
                }
         | 
| 1905 1942 | 
             
                RETURN_ERROR(parameter_unsupported, "");
         | 
| @@ -1911,6 +1948,7 @@ size_t ZSTD_DCtx_reset(ZSTD_DCtx* dctx, ZSTD_ResetDirective reset) | |
| 1911 1948 | 
             
                  || (reset == ZSTD_reset_session_and_parameters) ) {
         | 
| 1912 1949 | 
             
                    dctx->streamStage = zdss_init;
         | 
| 1913 1950 | 
             
                    dctx->noForwardProgress = 0;
         | 
| 1951 | 
            +
                    dctx->isFrameDecompression = 1;
         | 
| 1914 1952 | 
             
                }
         | 
| 1915 1953 | 
             
                if ( (reset == ZSTD_reset_parameters)
         | 
| 1916 1954 | 
             
                  || (reset == ZSTD_reset_session_and_parameters) ) {
         | 
| @@ -1927,11 +1965,17 @@ size_t ZSTD_sizeof_DStream(const ZSTD_DStream* dctx) | |
| 1927 1965 | 
             
                return ZSTD_sizeof_DCtx(dctx);
         | 
| 1928 1966 | 
             
            }
         | 
| 1929 1967 |  | 
| 1930 | 
            -
            size_t  | 
| 1968 | 
            +
            static size_t ZSTD_decodingBufferSize_internal(unsigned long long windowSize, unsigned long long frameContentSize, size_t blockSizeMax)
         | 
| 1931 1969 | 
             
            {
         | 
| 1932 | 
            -
                size_t const blockSize = (size_t) | 
| 1933 | 
            -
                /*  | 
| 1934 | 
            -
             | 
| 1970 | 
            +
                size_t const blockSize = MIN((size_t)MIN(windowSize, ZSTD_BLOCKSIZE_MAX), blockSizeMax);
         | 
| 1971 | 
            +
                /* We need blockSize + WILDCOPY_OVERLENGTH worth of buffer so that if a block
         | 
| 1972 | 
            +
                 * ends at windowSize + WILDCOPY_OVERLENGTH + 1 bytes, we can start writing
         | 
| 1973 | 
            +
                 * the block at the beginning of the output buffer, and maintain a full window.
         | 
| 1974 | 
            +
                 *
         | 
| 1975 | 
            +
                 * We need another blockSize worth of buffer so that we can store split
         | 
| 1976 | 
            +
                 * literals at the end of the block without overwriting the extDict window.
         | 
| 1977 | 
            +
                 */
         | 
| 1978 | 
            +
                unsigned long long const neededRBSize = windowSize + (blockSize * 2) + (WILDCOPY_OVERLENGTH * 2);
         | 
| 1935 1979 | 
             
                unsigned long long const neededSize = MIN(frameContentSize, neededRBSize);
         | 
| 1936 1980 | 
             
                size_t const minRBSize = (size_t) neededSize;
         | 
| 1937 1981 | 
             
                RETURN_ERROR_IF((unsigned long long)minRBSize != neededSize,
         | 
| @@ -1939,6 +1983,11 @@ size_t ZSTD_decodingBufferSize_min(unsigned long long windowSize, unsigned long | |
| 1939 1983 | 
             
                return minRBSize;
         | 
| 1940 1984 | 
             
            }
         | 
| 1941 1985 |  | 
| 1986 | 
            +
            size_t ZSTD_decodingBufferSize_min(unsigned long long windowSize, unsigned long long frameContentSize)
         | 
| 1987 | 
            +
            {
         | 
| 1988 | 
            +
                return ZSTD_decodingBufferSize_internal(windowSize, frameContentSize, ZSTD_BLOCKSIZE_MAX);
         | 
| 1989 | 
            +
            }
         | 
| 1990 | 
            +
             | 
| 1942 1991 | 
             
            size_t ZSTD_estimateDStreamSize(size_t windowSize)
         | 
| 1943 1992 | 
             
            {
         | 
| 1944 1993 | 
             
                size_t const blockSize = MIN(windowSize, ZSTD_BLOCKSIZE_MAX);
         | 
| @@ -2134,12 +2183,12 @@ size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inB | |
| 2134 2183 | 
             
                        if (zds->fParams.frameContentSize != ZSTD_CONTENTSIZE_UNKNOWN
         | 
| 2135 2184 | 
             
                            && zds->fParams.frameType != ZSTD_skippableFrame
         | 
| 2136 2185 | 
             
                            && (U64)(size_t)(oend-op) >= zds->fParams.frameContentSize) {
         | 
| 2137 | 
            -
                            size_t const cSize =  | 
| 2186 | 
            +
                            size_t const cSize = ZSTD_findFrameCompressedSize_advanced(istart, (size_t)(iend-istart), zds->format);
         | 
| 2138 2187 | 
             
                            if (cSize <= (size_t)(iend-istart)) {
         | 
| 2139 2188 | 
             
                                /* shortcut : using single-pass mode */
         | 
| 2140 2189 | 
             
                                size_t const decompressedSize = ZSTD_decompress_usingDDict(zds, op, (size_t)(oend-op), istart, cSize, ZSTD_getDDict(zds));
         | 
| 2141 2190 | 
             
                                if (ZSTD_isError(decompressedSize)) return decompressedSize;
         | 
| 2142 | 
            -
                                DEBUGLOG(4, "shortcut to single-pass ZSTD_decompress_usingDDict()")
         | 
| 2191 | 
            +
                                DEBUGLOG(4, "shortcut to single-pass ZSTD_decompress_usingDDict()");
         | 
| 2143 2192 | 
             
                                assert(istart != NULL);
         | 
| 2144 2193 | 
             
                                ip = istart + cSize;
         | 
| 2145 2194 | 
             
                                op = op ? op + decompressedSize : op; /* can occur if frameContentSize = 0 (empty frame) */
         | 
| @@ -2161,7 +2210,8 @@ size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inB | |
| 2161 2210 | 
             
                        DEBUGLOG(4, "Consume header");
         | 
| 2162 2211 | 
             
                        FORWARD_IF_ERROR(ZSTD_decompressBegin_usingDDict(zds, ZSTD_getDDict(zds)), "");
         | 
| 2163 2212 |  | 
| 2164 | 
            -
                        if ( | 
| 2213 | 
            +
                        if (zds->format == ZSTD_f_zstd1
         | 
| 2214 | 
            +
                            && (MEM_readLE32(zds->headerBuffer) & ZSTD_MAGIC_SKIPPABLE_MASK) == ZSTD_MAGIC_SKIPPABLE_START) {  /* skippable frame */
         | 
| 2165 2215 | 
             
                            zds->expected = MEM_readLE32(zds->headerBuffer + ZSTD_FRAMEIDSIZE);
         | 
| 2166 2216 | 
             
                            zds->stage = ZSTDds_skipFrame;
         | 
| 2167 2217 | 
             
                        } else {
         | 
| @@ -2177,11 +2227,13 @@ size_t ZSTD_decompressStream(ZSTD_DStream* zds, ZSTD_outBuffer* output, ZSTD_inB | |
| 2177 2227 | 
             
                        zds->fParams.windowSize = MAX(zds->fParams.windowSize, 1U << ZSTD_WINDOWLOG_ABSOLUTEMIN);
         | 
| 2178 2228 | 
             
                        RETURN_ERROR_IF(zds->fParams.windowSize > zds->maxWindowSize,
         | 
| 2179 2229 | 
             
                                        frameParameter_windowTooLarge, "");
         | 
| 2230 | 
            +
                        if (zds->maxBlockSizeParam != 0)
         | 
| 2231 | 
            +
                            zds->fParams.blockSizeMax = MIN(zds->fParams.blockSizeMax, (unsigned)zds->maxBlockSizeParam);
         | 
| 2180 2232 |  | 
| 2181 2233 | 
             
                        /* Adapt buffer sizes to frame header instructions */
         | 
| 2182 2234 | 
             
                        {   size_t const neededInBuffSize = MAX(zds->fParams.blockSizeMax, 4 /* frame checksum */);
         | 
| 2183 2235 | 
             
                            size_t const neededOutBuffSize = zds->outBufferMode == ZSTD_bm_buffered
         | 
| 2184 | 
            -
                                    ?  | 
| 2236 | 
            +
                                    ? ZSTD_decodingBufferSize_internal(zds->fParams.windowSize, zds->fParams.frameContentSize, zds->fParams.blockSizeMax)
         | 
| 2185 2237 | 
             
                                    : 0;
         | 
| 2186 2238 |  | 
| 2187 2239 | 
             
                            ZSTD_DCtx_updateOversizedDuration(zds, neededInBuffSize, neededOutBuffSize);
         |