extzstd 0.3 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/HISTORY.ja.md +8 -0
- data/README.md +1 -1
- data/contrib/zstd/CHANGELOG +94 -0
- data/contrib/zstd/CONTRIBUTING.md +351 -1
- data/contrib/zstd/Makefile +32 -10
- data/contrib/zstd/README.md +33 -10
- data/contrib/zstd/TESTING.md +2 -2
- data/contrib/zstd/appveyor.yml +42 -4
- data/contrib/zstd/lib/Makefile +128 -60
- data/contrib/zstd/lib/README.md +47 -16
- data/contrib/zstd/lib/common/bitstream.h +38 -39
- data/contrib/zstd/lib/common/compiler.h +40 -5
- data/contrib/zstd/lib/common/cpu.h +1 -1
- data/contrib/zstd/lib/common/debug.c +11 -31
- data/contrib/zstd/lib/common/debug.h +11 -31
- data/contrib/zstd/lib/common/entropy_common.c +13 -33
- data/contrib/zstd/lib/common/error_private.c +2 -1
- data/contrib/zstd/lib/common/error_private.h +6 -2
- data/contrib/zstd/lib/common/fse.h +12 -32
- data/contrib/zstd/lib/common/fse_decompress.c +12 -35
- data/contrib/zstd/lib/common/huf.h +15 -33
- data/contrib/zstd/lib/common/mem.h +75 -2
- data/contrib/zstd/lib/common/pool.c +8 -4
- data/contrib/zstd/lib/common/pool.h +2 -2
- data/contrib/zstd/lib/common/threading.c +50 -4
- data/contrib/zstd/lib/common/threading.h +36 -4
- data/contrib/zstd/lib/common/xxhash.c +23 -35
- data/contrib/zstd/lib/common/xxhash.h +11 -31
- data/contrib/zstd/lib/common/zstd_common.c +1 -1
- data/contrib/zstd/lib/common/zstd_errors.h +2 -1
- data/contrib/zstd/lib/common/zstd_internal.h +154 -26
- data/contrib/zstd/lib/compress/fse_compress.c +17 -40
- data/contrib/zstd/lib/compress/hist.c +15 -35
- data/contrib/zstd/lib/compress/hist.h +12 -32
- data/contrib/zstd/lib/compress/huf_compress.c +92 -92
- data/contrib/zstd/lib/compress/zstd_compress.c +1191 -1330
- data/contrib/zstd/lib/compress/zstd_compress_internal.h +317 -55
- data/contrib/zstd/lib/compress/zstd_compress_literals.c +158 -0
- data/contrib/zstd/lib/compress/zstd_compress_literals.h +29 -0
- data/contrib/zstd/lib/compress/zstd_compress_sequences.c +419 -0
- data/contrib/zstd/lib/compress/zstd_compress_sequences.h +54 -0
- data/contrib/zstd/lib/compress/zstd_compress_superblock.c +845 -0
- data/contrib/zstd/lib/compress/zstd_compress_superblock.h +32 -0
- data/contrib/zstd/lib/compress/zstd_cwksp.h +525 -0
- data/contrib/zstd/lib/compress/zstd_double_fast.c +65 -43
- data/contrib/zstd/lib/compress/zstd_double_fast.h +2 -2
- data/contrib/zstd/lib/compress/zstd_fast.c +92 -66
- data/contrib/zstd/lib/compress/zstd_fast.h +2 -2
- data/contrib/zstd/lib/compress/zstd_lazy.c +74 -42
- data/contrib/zstd/lib/compress/zstd_lazy.h +1 -1
- data/contrib/zstd/lib/compress/zstd_ldm.c +32 -10
- data/contrib/zstd/lib/compress/zstd_ldm.h +7 -2
- data/contrib/zstd/lib/compress/zstd_opt.c +81 -114
- data/contrib/zstd/lib/compress/zstd_opt.h +1 -1
- data/contrib/zstd/lib/compress/zstdmt_compress.c +95 -51
- data/contrib/zstd/lib/compress/zstdmt_compress.h +3 -2
- data/contrib/zstd/lib/decompress/huf_decompress.c +76 -60
- data/contrib/zstd/lib/decompress/zstd_ddict.c +12 -8
- data/contrib/zstd/lib/decompress/zstd_ddict.h +2 -2
- data/contrib/zstd/lib/decompress/zstd_decompress.c +292 -172
- data/contrib/zstd/lib/decompress/zstd_decompress_block.c +459 -338
- data/contrib/zstd/lib/decompress/zstd_decompress_block.h +3 -3
- data/contrib/zstd/lib/decompress/zstd_decompress_internal.h +18 -4
- data/contrib/zstd/lib/deprecated/zbuff.h +9 -8
- data/contrib/zstd/lib/deprecated/zbuff_common.c +2 -2
- data/contrib/zstd/lib/deprecated/zbuff_compress.c +1 -1
- data/contrib/zstd/lib/deprecated/zbuff_decompress.c +1 -1
- data/contrib/zstd/lib/dictBuilder/cover.c +164 -54
- data/contrib/zstd/lib/dictBuilder/cover.h +52 -7
- data/contrib/zstd/lib/dictBuilder/fastcover.c +60 -43
- data/contrib/zstd/lib/dictBuilder/zdict.c +43 -19
- data/contrib/zstd/lib/dictBuilder/zdict.h +56 -28
- data/contrib/zstd/lib/legacy/zstd_legacy.h +8 -4
- data/contrib/zstd/lib/legacy/zstd_v01.c +110 -110
- data/contrib/zstd/lib/legacy/zstd_v01.h +1 -1
- data/contrib/zstd/lib/legacy/zstd_v02.c +23 -13
- data/contrib/zstd/lib/legacy/zstd_v02.h +1 -1
- data/contrib/zstd/lib/legacy/zstd_v03.c +23 -13
- data/contrib/zstd/lib/legacy/zstd_v03.h +1 -1
- data/contrib/zstd/lib/legacy/zstd_v04.c +30 -17
- data/contrib/zstd/lib/legacy/zstd_v04.h +1 -1
- data/contrib/zstd/lib/legacy/zstd_v05.c +113 -102
- data/contrib/zstd/lib/legacy/zstd_v05.h +2 -2
- data/contrib/zstd/lib/legacy/zstd_v06.c +20 -18
- data/contrib/zstd/lib/legacy/zstd_v06.h +1 -1
- data/contrib/zstd/lib/legacy/zstd_v07.c +25 -19
- data/contrib/zstd/lib/legacy/zstd_v07.h +1 -1
- data/contrib/zstd/lib/libzstd.pc.in +3 -2
- data/contrib/zstd/lib/zstd.h +265 -88
- data/ext/extzstd.h +1 -1
- data/ext/libzstd_conf.h +8 -0
- data/ext/zstd_common.c +1 -3
- data/ext/zstd_compress.c +3 -3
- data/ext/zstd_decompress.c +1 -5
- data/ext/zstd_dictbuilder.c +2 -3
- data/ext/zstd_dictbuilder_fastcover.c +1 -3
- data/ext/zstd_legacy_v01.c +2 -0
- data/ext/zstd_legacy_v02.c +2 -0
- data/ext/zstd_legacy_v03.c +2 -0
- data/ext/zstd_legacy_v04.c +2 -0
- data/ext/zstd_legacy_v05.c +2 -0
- data/ext/zstd_legacy_v06.c +2 -0
- data/ext/zstd_legacy_v07.c +2 -0
- data/lib/extzstd.rb +18 -10
- data/lib/extzstd/version.rb +1 -1
- metadata +15 -6
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Copyright (c) 2016-
|
2
|
+
* Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
|
3
3
|
* All rights reserved.
|
4
4
|
*
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
@@ -11,7 +11,7 @@
|
|
11
11
|
|
12
12
|
#include <stddef.h> /* size_t, ptrdiff_t */
|
13
13
|
#include "zstd_v02.h"
|
14
|
-
#include "error_private.h"
|
14
|
+
#include "../common/error_private.h"
|
15
15
|
|
16
16
|
|
17
17
|
/******************************************
|
@@ -189,7 +189,7 @@ MEM_STATIC void MEM_write16(void* memPtr, U16 value)
|
|
189
189
|
memcpy(memPtr, &value, sizeof(value));
|
190
190
|
}
|
191
191
|
|
192
|
-
#endif
|
192
|
+
#endif /* MEM_FORCE_MEMORY_ACCESS */
|
193
193
|
|
194
194
|
|
195
195
|
MEM_STATIC U16 MEM_readLE16(const void* memPtr)
|
@@ -217,6 +217,11 @@ MEM_STATIC void MEM_writeLE16(void* memPtr, U16 val)
|
|
217
217
|
}
|
218
218
|
}
|
219
219
|
|
220
|
+
MEM_STATIC U32 MEM_readLE24(const void* memPtr)
|
221
|
+
{
|
222
|
+
return MEM_readLE16(memPtr) + (((const BYTE*)memPtr)[2] << 16);
|
223
|
+
}
|
224
|
+
|
220
225
|
MEM_STATIC U32 MEM_readLE32(const void* memPtr)
|
221
226
|
{
|
222
227
|
if (MEM_isLittleEndian())
|
@@ -348,7 +353,7 @@ MEM_STATIC unsigned BIT_highbit32 (U32 val)
|
|
348
353
|
_BitScanReverse ( &r, val );
|
349
354
|
return (unsigned) r;
|
350
355
|
# elif defined(__GNUC__) && (__GNUC__ >= 3) /* Use GCC Intrinsic */
|
351
|
-
return
|
356
|
+
return __builtin_clz (val) ^ 31;
|
352
357
|
# else /* Software version */
|
353
358
|
static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 };
|
354
359
|
U32 v = val;
|
@@ -2831,7 +2836,9 @@ static size_t ZSTD_getcBlockSize(const void* src, size_t srcSize, blockPropertie
|
|
2831
2836
|
static size_t ZSTD_copyUncompressedBlock(void* dst, size_t maxDstSize, const void* src, size_t srcSize)
|
2832
2837
|
{
|
2833
2838
|
if (srcSize > maxDstSize) return ERROR(dstSize_tooSmall);
|
2834
|
-
|
2839
|
+
if (srcSize > 0) {
|
2840
|
+
memcpy(dst, src, srcSize);
|
2841
|
+
}
|
2835
2842
|
return srcSize;
|
2836
2843
|
}
|
2837
2844
|
|
@@ -2884,6 +2891,7 @@ static size_t ZSTD_decodeLiteralsBlock(void* ctx,
|
|
2884
2891
|
const size_t litSize = (MEM_readLE32(istart) & 0xFFFFFF) >> 2; /* no buffer issue : srcSize >= MIN_CBLOCK_SIZE */
|
2885
2892
|
if (litSize > srcSize-11) /* risk of reading too far with wildcopy */
|
2886
2893
|
{
|
2894
|
+
if (litSize > BLOCKSIZE) return ERROR(corruption_detected);
|
2887
2895
|
if (litSize > srcSize-3) return ERROR(corruption_detected);
|
2888
2896
|
memcpy(dctx->litBuffer, istart, litSize);
|
2889
2897
|
dctx->litPtr = dctx->litBuffer;
|
@@ -3043,11 +3051,11 @@ static void ZSTD_decodeSequence(seq_t* seq, seqState_t* seqState)
|
|
3043
3051
|
seqState->prevOffset = seq->offset;
|
3044
3052
|
if (litLength == MaxLL)
|
3045
3053
|
{
|
3046
|
-
U32 add = *dumps
|
3054
|
+
const U32 add = dumps<de ? *dumps++ : 0;
|
3047
3055
|
if (add < 255) litLength += add;
|
3048
|
-
else
|
3056
|
+
else if (dumps + 3 <= de)
|
3049
3057
|
{
|
3050
|
-
litLength =
|
3058
|
+
litLength = MEM_readLE24(dumps);
|
3051
3059
|
dumps += 3;
|
3052
3060
|
}
|
3053
3061
|
if (dumps >= de) dumps = de-1; /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
@@ -3073,11 +3081,11 @@ static void ZSTD_decodeSequence(seq_t* seq, seqState_t* seqState)
|
|
3073
3081
|
matchLength = FSE_decodeSymbol(&(seqState->stateML), &(seqState->DStream));
|
3074
3082
|
if (matchLength == MaxML)
|
3075
3083
|
{
|
3076
|
-
U32 add = *dumps
|
3084
|
+
const U32 add = dumps<de ? *dumps++ : 0;
|
3077
3085
|
if (add < 255) matchLength += add;
|
3078
|
-
else
|
3086
|
+
else if (dumps + 3 <= de)
|
3079
3087
|
{
|
3080
|
-
matchLength =
|
3088
|
+
matchLength = MEM_readLE24(dumps);
|
3081
3089
|
dumps += 3;
|
3082
3090
|
}
|
3083
3091
|
if (dumps >= de) dumps = de-1; /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
@@ -3223,8 +3231,10 @@ static size_t ZSTD_decompressSequences(
|
|
3223
3231
|
size_t lastLLSize = litEnd - litPtr;
|
3224
3232
|
if (litPtr > litEnd) return ERROR(corruption_detected);
|
3225
3233
|
if (op+lastLLSize > oend) return ERROR(dstSize_tooSmall);
|
3226
|
-
if (
|
3227
|
-
|
3234
|
+
if (lastLLSize > 0) {
|
3235
|
+
if (op != litPtr) memmove(op, litPtr, lastLLSize);
|
3236
|
+
op += lastLLSize;
|
3237
|
+
}
|
3228
3238
|
}
|
3229
3239
|
}
|
3230
3240
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Copyright (c) 2016-
|
2
|
+
* Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
|
3
3
|
* All rights reserved.
|
4
4
|
*
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
@@ -11,7 +11,7 @@
|
|
11
11
|
|
12
12
|
#include <stddef.h> /* size_t, ptrdiff_t */
|
13
13
|
#include "zstd_v03.h"
|
14
|
-
#include "error_private.h"
|
14
|
+
#include "../common/error_private.h"
|
15
15
|
|
16
16
|
|
17
17
|
/******************************************
|
@@ -191,7 +191,7 @@ MEM_STATIC void MEM_write16(void* memPtr, U16 value)
|
|
191
191
|
}
|
192
192
|
|
193
193
|
|
194
|
-
#endif
|
194
|
+
#endif /* MEM_FORCE_MEMORY_ACCESS */
|
195
195
|
|
196
196
|
|
197
197
|
MEM_STATIC U16 MEM_readLE16(const void* memPtr)
|
@@ -219,6 +219,11 @@ MEM_STATIC void MEM_writeLE16(void* memPtr, U16 val)
|
|
219
219
|
}
|
220
220
|
}
|
221
221
|
|
222
|
+
MEM_STATIC U32 MEM_readLE24(const void* memPtr)
|
223
|
+
{
|
224
|
+
return MEM_readLE16(memPtr) + (((const BYTE*)memPtr)[2] << 16);
|
225
|
+
}
|
226
|
+
|
222
227
|
MEM_STATIC U32 MEM_readLE32(const void* memPtr)
|
223
228
|
{
|
224
229
|
if (MEM_isLittleEndian())
|
@@ -351,7 +356,7 @@ MEM_STATIC unsigned BIT_highbit32 (U32 val)
|
|
351
356
|
_BitScanReverse ( &r, val );
|
352
357
|
return (unsigned) r;
|
353
358
|
# elif defined(__GNUC__) && (__GNUC__ >= 3) /* Use GCC Intrinsic */
|
354
|
-
return
|
359
|
+
return __builtin_clz (val) ^ 31;
|
355
360
|
# else /* Software version */
|
356
361
|
static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 };
|
357
362
|
U32 v = val;
|
@@ -2472,7 +2477,9 @@ static size_t ZSTD_getcBlockSize(const void* src, size_t srcSize, blockPropertie
|
|
2472
2477
|
static size_t ZSTD_copyUncompressedBlock(void* dst, size_t maxDstSize, const void* src, size_t srcSize)
|
2473
2478
|
{
|
2474
2479
|
if (srcSize > maxDstSize) return ERROR(dstSize_tooSmall);
|
2475
|
-
|
2480
|
+
if (srcSize > 0) {
|
2481
|
+
memcpy(dst, src, srcSize);
|
2482
|
+
}
|
2476
2483
|
return srcSize;
|
2477
2484
|
}
|
2478
2485
|
|
@@ -2525,6 +2532,7 @@ static size_t ZSTD_decodeLiteralsBlock(void* ctx,
|
|
2525
2532
|
const size_t litSize = (MEM_readLE32(istart) & 0xFFFFFF) >> 2; /* no buffer issue : srcSize >= MIN_CBLOCK_SIZE */
|
2526
2533
|
if (litSize > srcSize-11) /* risk of reading too far with wildcopy */
|
2527
2534
|
{
|
2535
|
+
if (litSize > BLOCKSIZE) return ERROR(corruption_detected);
|
2528
2536
|
if (litSize > srcSize-3) return ERROR(corruption_detected);
|
2529
2537
|
memcpy(dctx->litBuffer, istart, litSize);
|
2530
2538
|
dctx->litPtr = dctx->litBuffer;
|
@@ -2684,11 +2692,11 @@ static void ZSTD_decodeSequence(seq_t* seq, seqState_t* seqState)
|
|
2684
2692
|
seqState->prevOffset = seq->offset;
|
2685
2693
|
if (litLength == MaxLL)
|
2686
2694
|
{
|
2687
|
-
U32 add = *dumps
|
2695
|
+
const U32 add = dumps<de ? *dumps++ : 0;
|
2688
2696
|
if (add < 255) litLength += add;
|
2689
|
-
else
|
2697
|
+
else if (dumps + 3 <= de)
|
2690
2698
|
{
|
2691
|
-
litLength =
|
2699
|
+
litLength = MEM_readLE24(dumps);
|
2692
2700
|
dumps += 3;
|
2693
2701
|
}
|
2694
2702
|
if (dumps >= de) dumps = de-1; /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
@@ -2714,11 +2722,11 @@ static void ZSTD_decodeSequence(seq_t* seq, seqState_t* seqState)
|
|
2714
2722
|
matchLength = FSE_decodeSymbol(&(seqState->stateML), &(seqState->DStream));
|
2715
2723
|
if (matchLength == MaxML)
|
2716
2724
|
{
|
2717
|
-
U32 add = *dumps
|
2725
|
+
const U32 add = dumps<de ? *dumps++ : 0;
|
2718
2726
|
if (add < 255) matchLength += add;
|
2719
|
-
else
|
2727
|
+
else if (dumps + 3 <= de)
|
2720
2728
|
{
|
2721
|
-
matchLength =
|
2729
|
+
matchLength = MEM_readLE24(dumps);
|
2722
2730
|
dumps += 3;
|
2723
2731
|
}
|
2724
2732
|
if (dumps >= de) dumps = de-1; /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
@@ -2864,8 +2872,10 @@ static size_t ZSTD_decompressSequences(
|
|
2864
2872
|
size_t lastLLSize = litEnd - litPtr;
|
2865
2873
|
if (litPtr > litEnd) return ERROR(corruption_detected);
|
2866
2874
|
if (op+lastLLSize > oend) return ERROR(dstSize_tooSmall);
|
2867
|
-
if (
|
2868
|
-
|
2875
|
+
if (lastLLSize > 0) {
|
2876
|
+
if (op != litPtr) memmove(op, litPtr, lastLLSize);
|
2877
|
+
op += lastLLSize;
|
2878
|
+
}
|
2869
2879
|
}
|
2870
2880
|
}
|
2871
2881
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Copyright (c) 2016-
|
2
|
+
* Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
|
3
3
|
* All rights reserved.
|
4
4
|
*
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
@@ -16,7 +16,7 @@
|
|
16
16
|
#include <string.h> /* memcpy */
|
17
17
|
|
18
18
|
#include "zstd_v04.h"
|
19
|
-
#include "error_private.h"
|
19
|
+
#include "../common/error_private.h"
|
20
20
|
|
21
21
|
|
22
22
|
/* ******************************************************************
|
@@ -161,7 +161,7 @@ MEM_STATIC void MEM_write16(void* memPtr, U16 value)
|
|
161
161
|
memcpy(memPtr, &value, sizeof(value));
|
162
162
|
}
|
163
163
|
|
164
|
-
#endif
|
164
|
+
#endif /* MEM_FORCE_MEMORY_ACCESS */
|
165
165
|
|
166
166
|
|
167
167
|
MEM_STATIC U16 MEM_readLE16(const void* memPtr)
|
@@ -189,6 +189,11 @@ MEM_STATIC void MEM_writeLE16(void* memPtr, U16 val)
|
|
189
189
|
}
|
190
190
|
}
|
191
191
|
|
192
|
+
MEM_STATIC U32 MEM_readLE24(const void* memPtr)
|
193
|
+
{
|
194
|
+
return MEM_readLE16(memPtr) + (((const BYTE*)memPtr)[2] << 16);
|
195
|
+
}
|
196
|
+
|
192
197
|
MEM_STATIC U32 MEM_readLE32(const void* memPtr)
|
193
198
|
{
|
194
199
|
if (MEM_isLittleEndian())
|
@@ -622,7 +627,7 @@ MEM_STATIC unsigned BIT_highbit32 (U32 val)
|
|
622
627
|
_BitScanReverse ( &r, val );
|
623
628
|
return (unsigned) r;
|
624
629
|
# elif defined(__GNUC__) && (__GNUC__ >= 3) /* Use GCC Intrinsic */
|
625
|
-
return
|
630
|
+
return __builtin_clz (val) ^ 31;
|
626
631
|
# else /* Software version */
|
627
632
|
static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 };
|
628
633
|
U32 v = val;
|
@@ -2598,7 +2603,9 @@ static size_t ZSTD_getcBlockSize(const void* src, size_t srcSize, blockPropertie
|
|
2598
2603
|
static size_t ZSTD_copyRawBlock(void* dst, size_t maxDstSize, const void* src, size_t srcSize)
|
2599
2604
|
{
|
2600
2605
|
if (srcSize > maxDstSize) return ERROR(dstSize_tooSmall);
|
2601
|
-
|
2606
|
+
if (srcSize > 0) {
|
2607
|
+
memcpy(dst, src, srcSize);
|
2608
|
+
}
|
2602
2609
|
return srcSize;
|
2603
2610
|
}
|
2604
2611
|
|
@@ -2650,6 +2657,7 @@ static size_t ZSTD_decodeLiteralsBlock(ZSTD_DCtx* dctx,
|
|
2650
2657
|
const size_t litSize = (MEM_readLE32(istart) & 0xFFFFFF) >> 2; /* no buffer issue : srcSize >= MIN_CBLOCK_SIZE */
|
2651
2658
|
if (litSize > srcSize-11) /* risk of reading too far with wildcopy */
|
2652
2659
|
{
|
2660
|
+
if (litSize > BLOCKSIZE) return ERROR(corruption_detected);
|
2653
2661
|
if (litSize > srcSize-3) return ERROR(corruption_detected);
|
2654
2662
|
memcpy(dctx->litBuffer, istart, litSize);
|
2655
2663
|
dctx->litPtr = dctx->litBuffer;
|
@@ -2808,13 +2816,12 @@ static void ZSTD_decodeSequence(seq_t* seq, seqState_t* seqState)
|
|
2808
2816
|
litLength = FSE_decodeSymbol(&(seqState->stateLL), &(seqState->DStream));
|
2809
2817
|
prevOffset = litLength ? seq->offset : seqState->prevOffset;
|
2810
2818
|
if (litLength == MaxLL) {
|
2811
|
-
U32 add = *dumps
|
2819
|
+
const U32 add = dumps<de ? *dumps++ : 0;
|
2812
2820
|
if (add < 255) litLength += add;
|
2813
|
-
else {
|
2814
|
-
litLength =
|
2821
|
+
else if (dumps + 3 <= de) {
|
2822
|
+
litLength = MEM_readLE24(dumps);
|
2815
2823
|
dumps += 3;
|
2816
2824
|
}
|
2817
|
-
if (dumps > de) { litLength = MaxLL+255; } /* late correction, to avoid using uninitialized memory */
|
2818
2825
|
if (dumps >= de) { dumps = de-1; } /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
2819
2826
|
}
|
2820
2827
|
|
@@ -2837,13 +2844,12 @@ static void ZSTD_decodeSequence(seq_t* seq, seqState_t* seqState)
|
|
2837
2844
|
/* MatchLength */
|
2838
2845
|
matchLength = FSE_decodeSymbol(&(seqState->stateML), &(seqState->DStream));
|
2839
2846
|
if (matchLength == MaxML) {
|
2840
|
-
U32 add = *dumps
|
2847
|
+
const U32 add = dumps<de ? *dumps++ : 0;
|
2841
2848
|
if (add < 255) matchLength += add;
|
2842
|
-
else {
|
2843
|
-
matchLength =
|
2849
|
+
else if (dumps + 3 <= de){
|
2850
|
+
matchLength = MEM_readLE24(dumps);
|
2844
2851
|
dumps += 3;
|
2845
2852
|
}
|
2846
|
-
if (dumps > de) { matchLength = MaxML+255; } /* late correction, to avoid using uninitialized memory */
|
2847
2853
|
if (dumps >= de) { dumps = de-1; } /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
2848
2854
|
}
|
2849
2855
|
matchLength += MINMATCH;
|
@@ -3004,8 +3010,10 @@ static size_t ZSTD_decompressSequences(
|
|
3004
3010
|
size_t lastLLSize = litEnd - litPtr;
|
3005
3011
|
if (litPtr > litEnd) return ERROR(corruption_detected);
|
3006
3012
|
if (op+lastLLSize > oend) return ERROR(dstSize_tooSmall);
|
3007
|
-
if (
|
3008
|
-
|
3013
|
+
if (lastLLSize > 0) {
|
3014
|
+
if (op != litPtr) memcpy(op, litPtr, lastLLSize);
|
3015
|
+
op += lastLLSize;
|
3016
|
+
}
|
3009
3017
|
}
|
3010
3018
|
}
|
3011
3019
|
|
@@ -3031,9 +3039,12 @@ static size_t ZSTD_decompressBlock_internal(ZSTD_DCtx* dctx,
|
|
3031
3039
|
{
|
3032
3040
|
/* blockType == blockCompressed */
|
3033
3041
|
const BYTE* ip = (const BYTE*)src;
|
3042
|
+
size_t litCSize;
|
3043
|
+
|
3044
|
+
if (srcSize > BLOCKSIZE) return ERROR(corruption_detected);
|
3034
3045
|
|
3035
3046
|
/* Decode literals sub-block */
|
3036
|
-
|
3047
|
+
litCSize = ZSTD_decodeLiteralsBlock(dctx, src, srcSize);
|
3037
3048
|
if (ZSTD_isError(litCSize)) return litCSize;
|
3038
3049
|
ip += litCSize;
|
3039
3050
|
srcSize -= litCSize;
|
@@ -3400,7 +3411,9 @@ static size_t ZBUFF_decompressWithDictionary(ZBUFF_DCtx* zbc, const void* src, s
|
|
3400
3411
|
static size_t ZBUFF_limitCopy(void* dst, size_t maxDstSize, const void* src, size_t srcSize)
|
3401
3412
|
{
|
3402
3413
|
size_t length = MIN(maxDstSize, srcSize);
|
3403
|
-
|
3414
|
+
if (length > 0) {
|
3415
|
+
memcpy(dst, src, length);
|
3416
|
+
}
|
3404
3417
|
return length;
|
3405
3418
|
}
|
3406
3419
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/*
|
2
|
-
* Copyright (c) 2016-
|
2
|
+
* Copyright (c) 2016-2020, Yann Collet, Facebook, Inc.
|
3
3
|
* All rights reserved.
|
4
4
|
*
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
@@ -11,7 +11,7 @@
|
|
11
11
|
|
12
12
|
/*- Dependencies -*/
|
13
13
|
#include "zstd_v05.h"
|
14
|
-
#include "error_private.h"
|
14
|
+
#include "../common/error_private.h"
|
15
15
|
|
16
16
|
|
17
17
|
/* ******************************************************************
|
@@ -756,7 +756,7 @@ MEM_STATIC unsigned BITv05_highbit32 (U32 val)
|
|
756
756
|
_BitScanReverse ( &r, val );
|
757
757
|
return (unsigned) r;
|
758
758
|
# elif defined(__GNUC__) && (__GNUC__ >= 3) /* Use GCC Intrinsic */
|
759
|
-
return
|
759
|
+
return __builtin_clz (val) ^ 31;
|
760
760
|
# else /* Software version */
|
761
761
|
static const unsigned DeBruijnClz[32] = { 0, 9, 1, 10, 13, 21, 2, 29, 11, 14, 16, 18, 22, 25, 3, 30, 8, 12, 20, 28, 15, 17, 24, 7, 19, 27, 23, 6, 26, 5, 4, 31 };
|
762
762
|
U32 v = val;
|
@@ -1804,7 +1804,7 @@ static size_t HUFv05_readStats(BYTE* huffWeight, size_t hwSize, U32* rankStats,
|
|
1804
1804
|
|
1805
1805
|
if (!srcSize) return ERROR(srcSize_wrong);
|
1806
1806
|
iSize = ip[0];
|
1807
|
-
|
1807
|
+
/* memset(huffWeight, 0, hwSize); */ /* is not necessary, even though some analyzer complain ... */
|
1808
1808
|
|
1809
1809
|
if (iSize >= 128) { /* special header */
|
1810
1810
|
if (iSize >= (242)) { /* RLE */
|
@@ -1879,7 +1879,7 @@ size_t HUFv05_readDTableX2 (U16* DTable, const void* src, size_t srcSize)
|
|
1879
1879
|
HUFv05_DEltX2* const dt = (HUFv05_DEltX2*)dtPtr;
|
1880
1880
|
|
1881
1881
|
HUFv05_STATIC_ASSERT(sizeof(HUFv05_DEltX2) == sizeof(U16)); /* if compilation fails here, assertion is false */
|
1882
|
-
|
1882
|
+
/* memset(huffWeight, 0, sizeof(huffWeight)); */ /* is not necessary, even though some analyzer complain ... */
|
1883
1883
|
|
1884
1884
|
iSize = HUFv05_readStats(huffWeight, HUFv05_MAX_SYMBOL_VALUE + 1, rankVal, &nbSymbols, &tableLog, src, srcSize);
|
1885
1885
|
if (HUFv05_isError(iSize)) return iSize;
|
@@ -1998,91 +1998,92 @@ size_t HUFv05_decompress4X2_usingDTable(
|
|
1998
1998
|
const void* cSrc, size_t cSrcSize,
|
1999
1999
|
const U16* DTable)
|
2000
2000
|
{
|
2001
|
-
const BYTE* const istart = (const BYTE*) cSrc;
|
2002
|
-
BYTE* const ostart = (BYTE*) dst;
|
2003
|
-
BYTE* const oend = ostart + dstSize;
|
2004
|
-
const void* const dtPtr = DTable;
|
2005
|
-
const HUFv05_DEltX2* const dt = ((const HUFv05_DEltX2*)dtPtr) +1;
|
2006
|
-
const U32 dtLog = DTable[0];
|
2007
|
-
size_t errorCode;
|
2008
|
-
|
2009
|
-
/* Init */
|
2010
|
-
BITv05_DStream_t bitD1;
|
2011
|
-
BITv05_DStream_t bitD2;
|
2012
|
-
BITv05_DStream_t bitD3;
|
2013
|
-
BITv05_DStream_t bitD4;
|
2014
|
-
const size_t length1 = MEM_readLE16(istart);
|
2015
|
-
const size_t length2 = MEM_readLE16(istart+2);
|
2016
|
-
const size_t length3 = MEM_readLE16(istart+4);
|
2017
|
-
size_t length4;
|
2018
|
-
const BYTE* const istart1 = istart + 6; /* jumpTable */
|
2019
|
-
const BYTE* const istart2 = istart1 + length1;
|
2020
|
-
const BYTE* const istart3 = istart2 + length2;
|
2021
|
-
const BYTE* const istart4 = istart3 + length3;
|
2022
|
-
const size_t segmentSize = (dstSize+3) / 4;
|
2023
|
-
BYTE* const opStart2 = ostart + segmentSize;
|
2024
|
-
BYTE* const opStart3 = opStart2 + segmentSize;
|
2025
|
-
BYTE* const opStart4 = opStart3 + segmentSize;
|
2026
|
-
BYTE* op1 = ostart;
|
2027
|
-
BYTE* op2 = opStart2;
|
2028
|
-
BYTE* op3 = opStart3;
|
2029
|
-
BYTE* op4 = opStart4;
|
2030
|
-
U32 endSignal;
|
2031
|
-
|
2032
2001
|
/* Check */
|
2033
2002
|
if (cSrcSize < 10) return ERROR(corruption_detected); /* strict minimum : jump table + 1 byte per stream */
|
2003
|
+
{
|
2004
|
+
const BYTE* const istart = (const BYTE*) cSrc;
|
2005
|
+
BYTE* const ostart = (BYTE*) dst;
|
2006
|
+
BYTE* const oend = ostart + dstSize;
|
2007
|
+
const void* const dtPtr = DTable;
|
2008
|
+
const HUFv05_DEltX2* const dt = ((const HUFv05_DEltX2*)dtPtr) +1;
|
2009
|
+
const U32 dtLog = DTable[0];
|
2010
|
+
size_t errorCode;
|
2034
2011
|
|
2035
|
-
|
2036
|
-
|
2037
|
-
|
2038
|
-
|
2039
|
-
|
2040
|
-
|
2041
|
-
|
2042
|
-
|
2043
|
-
|
2044
|
-
|
2012
|
+
/* Init */
|
2013
|
+
BITv05_DStream_t bitD1;
|
2014
|
+
BITv05_DStream_t bitD2;
|
2015
|
+
BITv05_DStream_t bitD3;
|
2016
|
+
BITv05_DStream_t bitD4;
|
2017
|
+
const size_t length1 = MEM_readLE16(istart);
|
2018
|
+
const size_t length2 = MEM_readLE16(istart+2);
|
2019
|
+
const size_t length3 = MEM_readLE16(istart+4);
|
2020
|
+
size_t length4;
|
2021
|
+
const BYTE* const istart1 = istart + 6; /* jumpTable */
|
2022
|
+
const BYTE* const istart2 = istart1 + length1;
|
2023
|
+
const BYTE* const istart3 = istart2 + length2;
|
2024
|
+
const BYTE* const istart4 = istart3 + length3;
|
2025
|
+
const size_t segmentSize = (dstSize+3) / 4;
|
2026
|
+
BYTE* const opStart2 = ostart + segmentSize;
|
2027
|
+
BYTE* const opStart3 = opStart2 + segmentSize;
|
2028
|
+
BYTE* const opStart4 = opStart3 + segmentSize;
|
2029
|
+
BYTE* op1 = ostart;
|
2030
|
+
BYTE* op2 = opStart2;
|
2031
|
+
BYTE* op3 = opStart3;
|
2032
|
+
BYTE* op4 = opStart4;
|
2033
|
+
U32 endSignal;
|
2034
|
+
|
2035
|
+
length4 = cSrcSize - (length1 + length2 + length3 + 6);
|
2036
|
+
if (length4 > cSrcSize) return ERROR(corruption_detected); /* overflow */
|
2037
|
+
errorCode = BITv05_initDStream(&bitD1, istart1, length1);
|
2038
|
+
if (HUFv05_isError(errorCode)) return errorCode;
|
2039
|
+
errorCode = BITv05_initDStream(&bitD2, istart2, length2);
|
2040
|
+
if (HUFv05_isError(errorCode)) return errorCode;
|
2041
|
+
errorCode = BITv05_initDStream(&bitD3, istart3, length3);
|
2042
|
+
if (HUFv05_isError(errorCode)) return errorCode;
|
2043
|
+
errorCode = BITv05_initDStream(&bitD4, istart4, length4);
|
2044
|
+
if (HUFv05_isError(errorCode)) return errorCode;
|
2045
2045
|
|
2046
|
-
|
2047
|
-
endSignal = BITv05_reloadDStream(&bitD1) | BITv05_reloadDStream(&bitD2) | BITv05_reloadDStream(&bitD3) | BITv05_reloadDStream(&bitD4);
|
2048
|
-
for ( ; (endSignal==BITv05_DStream_unfinished) && (op4<(oend-7)) ; ) {
|
2049
|
-
HUFv05_DECODE_SYMBOLX2_2(op1, &bitD1);
|
2050
|
-
HUFv05_DECODE_SYMBOLX2_2(op2, &bitD2);
|
2051
|
-
HUFv05_DECODE_SYMBOLX2_2(op3, &bitD3);
|
2052
|
-
HUFv05_DECODE_SYMBOLX2_2(op4, &bitD4);
|
2053
|
-
HUFv05_DECODE_SYMBOLX2_1(op1, &bitD1);
|
2054
|
-
HUFv05_DECODE_SYMBOLX2_1(op2, &bitD2);
|
2055
|
-
HUFv05_DECODE_SYMBOLX2_1(op3, &bitD3);
|
2056
|
-
HUFv05_DECODE_SYMBOLX2_1(op4, &bitD4);
|
2057
|
-
HUFv05_DECODE_SYMBOLX2_2(op1, &bitD1);
|
2058
|
-
HUFv05_DECODE_SYMBOLX2_2(op2, &bitD2);
|
2059
|
-
HUFv05_DECODE_SYMBOLX2_2(op3, &bitD3);
|
2060
|
-
HUFv05_DECODE_SYMBOLX2_2(op4, &bitD4);
|
2061
|
-
HUFv05_DECODE_SYMBOLX2_0(op1, &bitD1);
|
2062
|
-
HUFv05_DECODE_SYMBOLX2_0(op2, &bitD2);
|
2063
|
-
HUFv05_DECODE_SYMBOLX2_0(op3, &bitD3);
|
2064
|
-
HUFv05_DECODE_SYMBOLX2_0(op4, &bitD4);
|
2046
|
+
/* 16-32 symbols per loop (4-8 symbols per stream) */
|
2065
2047
|
endSignal = BITv05_reloadDStream(&bitD1) | BITv05_reloadDStream(&bitD2) | BITv05_reloadDStream(&bitD3) | BITv05_reloadDStream(&bitD4);
|
2066
|
-
|
2048
|
+
for ( ; (endSignal==BITv05_DStream_unfinished) && (op4<(oend-7)) ; ) {
|
2049
|
+
HUFv05_DECODE_SYMBOLX2_2(op1, &bitD1);
|
2050
|
+
HUFv05_DECODE_SYMBOLX2_2(op2, &bitD2);
|
2051
|
+
HUFv05_DECODE_SYMBOLX2_2(op3, &bitD3);
|
2052
|
+
HUFv05_DECODE_SYMBOLX2_2(op4, &bitD4);
|
2053
|
+
HUFv05_DECODE_SYMBOLX2_1(op1, &bitD1);
|
2054
|
+
HUFv05_DECODE_SYMBOLX2_1(op2, &bitD2);
|
2055
|
+
HUFv05_DECODE_SYMBOLX2_1(op3, &bitD3);
|
2056
|
+
HUFv05_DECODE_SYMBOLX2_1(op4, &bitD4);
|
2057
|
+
HUFv05_DECODE_SYMBOLX2_2(op1, &bitD1);
|
2058
|
+
HUFv05_DECODE_SYMBOLX2_2(op2, &bitD2);
|
2059
|
+
HUFv05_DECODE_SYMBOLX2_2(op3, &bitD3);
|
2060
|
+
HUFv05_DECODE_SYMBOLX2_2(op4, &bitD4);
|
2061
|
+
HUFv05_DECODE_SYMBOLX2_0(op1, &bitD1);
|
2062
|
+
HUFv05_DECODE_SYMBOLX2_0(op2, &bitD2);
|
2063
|
+
HUFv05_DECODE_SYMBOLX2_0(op3, &bitD3);
|
2064
|
+
HUFv05_DECODE_SYMBOLX2_0(op4, &bitD4);
|
2065
|
+
endSignal = BITv05_reloadDStream(&bitD1) | BITv05_reloadDStream(&bitD2) | BITv05_reloadDStream(&bitD3) | BITv05_reloadDStream(&bitD4);
|
2066
|
+
}
|
2067
2067
|
|
2068
|
-
|
2069
|
-
|
2070
|
-
|
2071
|
-
|
2072
|
-
|
2068
|
+
/* check corruption */
|
2069
|
+
if (op1 > opStart2) return ERROR(corruption_detected);
|
2070
|
+
if (op2 > opStart3) return ERROR(corruption_detected);
|
2071
|
+
if (op3 > opStart4) return ERROR(corruption_detected);
|
2072
|
+
/* note : op4 supposed already verified within main loop */
|
2073
2073
|
|
2074
|
-
|
2075
|
-
|
2076
|
-
|
2077
|
-
|
2078
|
-
|
2074
|
+
/* finish bitStreams one by one */
|
2075
|
+
HUFv05_decodeStreamX2(op1, &bitD1, opStart2, dt, dtLog);
|
2076
|
+
HUFv05_decodeStreamX2(op2, &bitD2, opStart3, dt, dtLog);
|
2077
|
+
HUFv05_decodeStreamX2(op3, &bitD3, opStart4, dt, dtLog);
|
2078
|
+
HUFv05_decodeStreamX2(op4, &bitD4, oend, dt, dtLog);
|
2079
2079
|
|
2080
|
-
|
2081
|
-
|
2082
|
-
|
2080
|
+
/* check */
|
2081
|
+
endSignal = BITv05_endOfDStream(&bitD1) & BITv05_endOfDStream(&bitD2) & BITv05_endOfDStream(&bitD3) & BITv05_endOfDStream(&bitD4);
|
2082
|
+
if (!endSignal) return ERROR(corruption_detected);
|
2083
2083
|
|
2084
|
-
|
2085
|
-
|
2084
|
+
/* decoded size */
|
2085
|
+
return dstSize;
|
2086
|
+
}
|
2086
2087
|
}
|
2087
2088
|
|
2088
2089
|
|
@@ -2209,7 +2210,7 @@ size_t HUFv05_readDTableX4 (unsigned* DTable, const void* src, size_t srcSize)
|
|
2209
2210
|
|
2210
2211
|
HUFv05_STATIC_ASSERT(sizeof(HUFv05_DEltX4) == sizeof(unsigned)); /* if compilation fails here, assertion is false */
|
2211
2212
|
if (memLog > HUFv05_ABSOLUTEMAX_TABLELOG) return ERROR(tableLog_tooLarge);
|
2212
|
-
|
2213
|
+
/* memset(weightList, 0, sizeof(weightList)); */ /* is not necessary, even though some analyzer complain ... */
|
2213
2214
|
|
2214
2215
|
iSize = HUFv05_readStats(weightList, HUFv05_MAX_SYMBOL_VALUE + 1, rankStats, &nbSymbols, &tableLog, src, srcSize);
|
2215
2216
|
if (HUFv05_isError(iSize)) return iSize;
|
@@ -2538,9 +2539,9 @@ size_t HUFv05_decompress (void* dst, size_t dstSize, const void* cSrc, size_t cS
|
|
2538
2539
|
|
2539
2540
|
return decompress[algoNb](dst, dstSize, cSrc, cSrcSize);
|
2540
2541
|
|
2541
|
-
|
2542
|
-
|
2543
|
-
|
2542
|
+
/* return HUFv05_decompress4X2(dst, dstSize, cSrc, cSrcSize); */ /* multi-streams single-symbol decoding */
|
2543
|
+
/* return HUFv05_decompress4X4(dst, dstSize, cSrc, cSrcSize); */ /* multi-streams double-symbols decoding */
|
2544
|
+
/* return HUFv05_decompress4X6(dst, dstSize, cSrc, cSrcSize); */ /* multi-streams quad-symbols decoding */
|
2544
2545
|
}
|
2545
2546
|
/*
|
2546
2547
|
zstd - standard compression library
|
@@ -3150,14 +3151,17 @@ static void ZSTDv05_decodeSequence(seq_t* seq, seqState_t* seqState)
|
|
3150
3151
|
litLength = FSEv05_peakSymbol(&(seqState->stateLL));
|
3151
3152
|
prevOffset = litLength ? seq->offset : seqState->prevOffset;
|
3152
3153
|
if (litLength == MaxLL) {
|
3153
|
-
U32 add = *dumps++;
|
3154
|
+
const U32 add = *dumps++;
|
3154
3155
|
if (add < 255) litLength += add;
|
3155
|
-
else {
|
3156
|
-
litLength =
|
3157
|
-
|
3158
|
-
|
3156
|
+
else if (dumps + 2 <= de) {
|
3157
|
+
litLength = MEM_readLE16(dumps);
|
3158
|
+
dumps += 2;
|
3159
|
+
if ((litLength & 1) && dumps < de) {
|
3160
|
+
litLength += *dumps << 16;
|
3161
|
+
dumps += 1;
|
3162
|
+
}
|
3163
|
+
litLength>>=1;
|
3159
3164
|
}
|
3160
|
-
if (dumps > de) { litLength = MaxLL+255; } /* late correction, to avoid using uninitialized memory */
|
3161
3165
|
if (dumps >= de) { dumps = de-1; } /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
3162
3166
|
}
|
3163
3167
|
|
@@ -3184,14 +3188,17 @@ static void ZSTDv05_decodeSequence(seq_t* seq, seqState_t* seqState)
|
|
3184
3188
|
/* MatchLength */
|
3185
3189
|
matchLength = FSEv05_decodeSymbol(&(seqState->stateML), &(seqState->DStream));
|
3186
3190
|
if (matchLength == MaxML) {
|
3187
|
-
U32 add = *dumps
|
3191
|
+
const U32 add = dumps<de ? *dumps++ : 0;
|
3188
3192
|
if (add < 255) matchLength += add;
|
3189
|
-
else {
|
3190
|
-
matchLength =
|
3191
|
-
|
3192
|
-
|
3193
|
+
else if (dumps + 2 <= de) {
|
3194
|
+
matchLength = MEM_readLE16(dumps);
|
3195
|
+
dumps += 2;
|
3196
|
+
if ((matchLength & 1) && dumps < de) {
|
3197
|
+
matchLength += *dumps << 16;
|
3198
|
+
dumps += 1;
|
3199
|
+
}
|
3200
|
+
matchLength >>= 1;
|
3193
3201
|
}
|
3194
|
-
if (dumps > de) { matchLength = MaxML+255; } /* late correction, to avoid using uninitialized memory */
|
3195
3202
|
if (dumps >= de) { dumps = de-1; } /* late correction, to avoid read overflow (data is now corrupted anyway) */
|
3196
3203
|
}
|
3197
3204
|
matchLength += MINMATCH;
|
@@ -3355,8 +3362,10 @@ static size_t ZSTDv05_decompressSequences(
|
|
3355
3362
|
size_t lastLLSize = litEnd - litPtr;
|
3356
3363
|
if (litPtr > litEnd) return ERROR(corruption_detected); /* too many literals already used */
|
3357
3364
|
if (op+lastLLSize > oend) return ERROR(dstSize_tooSmall);
|
3358
|
-
|
3359
|
-
|
3365
|
+
if (lastLLSize > 0) {
|
3366
|
+
memcpy(op, litPtr, lastLLSize);
|
3367
|
+
op += lastLLSize;
|
3368
|
+
}
|
3360
3369
|
}
|
3361
3370
|
|
3362
3371
|
return op-ostart;
|
@@ -3784,7 +3793,9 @@ static size_t ZBUFFv05_blockHeaderSize = 3;
|
|
3784
3793
|
static size_t ZBUFFv05_limitCopy(void* dst, size_t maxDstSize, const void* src, size_t srcSize)
|
3785
3794
|
{
|
3786
3795
|
size_t length = MIN(maxDstSize, srcSize);
|
3787
|
-
|
3796
|
+
if (length > 0) {
|
3797
|
+
memcpy(dst, src, length);
|
3798
|
+
}
|
3788
3799
|
return length;
|
3789
3800
|
}
|
3790
3801
|
|
@@ -3921,7 +3932,7 @@ size_t ZBUFFv05_decompressContinue(ZBUFFv05_DCtx* zbc, void* dst, size_t* maxDst
|
|
3921
3932
|
*maxDstSizePtr = 0;
|
3922
3933
|
return headerSize - zbc->hPos;
|
3923
3934
|
}
|
3924
|
-
|
3935
|
+
/* zbc->stage = ZBUFFv05ds_decodeHeader; break; */ /* useless : stage follows */
|
3925
3936
|
}
|
3926
3937
|
/* fall-through */
|
3927
3938
|
case ZBUFFv05ds_decodeHeader:
|
@@ -3994,7 +4005,7 @@ size_t ZBUFFv05_decompressContinue(ZBUFFv05_DCtx* zbc, void* dst, size_t* maxDst
|
|
3994
4005
|
if (!decodedSize) { zbc->stage = ZBUFFv05ds_read; break; } /* this was just a header */
|
3995
4006
|
zbc->outEnd = zbc->outStart + decodedSize;
|
3996
4007
|
zbc->stage = ZBUFFv05ds_flush;
|
3997
|
-
|
4008
|
+
/* break; */ /* ZBUFFv05ds_flush follows */
|
3998
4009
|
}
|
3999
4010
|
}
|
4000
4011
|
/* fall-through */
|