extzstd 0.3.2 → 0.4
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/README.md +4 -3
- data/contrib/zstd/CHANGELOG +225 -1
- data/contrib/zstd/CONTRIBUTING.md +158 -75
- data/contrib/zstd/LICENSE +4 -4
- data/contrib/zstd/Makefile +106 -69
- data/contrib/zstd/Package.swift +36 -0
- data/contrib/zstd/README.md +64 -36
- data/contrib/zstd/SECURITY.md +15 -0
- data/contrib/zstd/TESTING.md +2 -3
- data/contrib/zstd/lib/BUCK +5 -7
- data/contrib/zstd/lib/Makefile +117 -199
- data/contrib/zstd/lib/README.md +37 -7
- data/contrib/zstd/lib/common/allocations.h +55 -0
- data/contrib/zstd/lib/common/bits.h +200 -0
- data/contrib/zstd/lib/common/bitstream.h +80 -86
- data/contrib/zstd/lib/common/compiler.h +225 -63
- data/contrib/zstd/lib/common/cpu.h +37 -1
- data/contrib/zstd/lib/common/debug.c +7 -1
- data/contrib/zstd/lib/common/debug.h +21 -12
- data/contrib/zstd/lib/common/entropy_common.c +15 -37
- data/contrib/zstd/lib/common/error_private.c +9 -2
- data/contrib/zstd/lib/common/error_private.h +93 -5
- data/contrib/zstd/lib/common/fse.h +12 -87
- data/contrib/zstd/lib/common/fse_decompress.c +37 -117
- data/contrib/zstd/lib/common/huf.h +97 -172
- data/contrib/zstd/lib/common/mem.h +58 -58
- data/contrib/zstd/lib/common/pool.c +38 -17
- data/contrib/zstd/lib/common/pool.h +10 -4
- data/contrib/zstd/lib/common/portability_macros.h +158 -0
- data/contrib/zstd/lib/common/threading.c +74 -14
- data/contrib/zstd/lib/common/threading.h +5 -10
- data/contrib/zstd/lib/common/xxhash.c +6 -814
- data/contrib/zstd/lib/common/xxhash.h +6930 -195
- data/contrib/zstd/lib/common/zstd_common.c +1 -36
- data/contrib/zstd/lib/common/zstd_deps.h +1 -1
- data/contrib/zstd/lib/common/zstd_internal.h +68 -154
- data/contrib/zstd/lib/common/zstd_trace.h +163 -0
- data/contrib/zstd/lib/compress/clevels.h +134 -0
- data/contrib/zstd/lib/compress/fse_compress.c +75 -155
- data/contrib/zstd/lib/compress/hist.c +1 -1
- data/contrib/zstd/lib/compress/hist.h +1 -1
- data/contrib/zstd/lib/compress/huf_compress.c +810 -259
- data/contrib/zstd/lib/compress/zstd_compress.c +2864 -919
- data/contrib/zstd/lib/compress/zstd_compress_internal.h +523 -192
- data/contrib/zstd/lib/compress/zstd_compress_literals.c +117 -40
- data/contrib/zstd/lib/compress/zstd_compress_literals.h +16 -6
- data/contrib/zstd/lib/compress/zstd_compress_sequences.c +28 -19
- data/contrib/zstd/lib/compress/zstd_compress_sequences.h +1 -1
- data/contrib/zstd/lib/compress/zstd_compress_superblock.c +251 -412
- data/contrib/zstd/lib/compress/zstd_compress_superblock.h +1 -1
- data/contrib/zstd/lib/compress/zstd_cwksp.h +284 -97
- data/contrib/zstd/lib/compress/zstd_double_fast.c +382 -133
- data/contrib/zstd/lib/compress/zstd_double_fast.h +14 -2
- data/contrib/zstd/lib/compress/zstd_fast.c +732 -260
- data/contrib/zstd/lib/compress/zstd_fast.h +3 -2
- data/contrib/zstd/lib/compress/zstd_lazy.c +1177 -390
- data/contrib/zstd/lib/compress/zstd_lazy.h +129 -14
- data/contrib/zstd/lib/compress/zstd_ldm.c +280 -210
- data/contrib/zstd/lib/compress/zstd_ldm.h +3 -2
- data/contrib/zstd/lib/compress/zstd_ldm_geartab.h +106 -0
- data/contrib/zstd/lib/compress/zstd_opt.c +516 -285
- data/contrib/zstd/lib/compress/zstd_opt.h +32 -8
- data/contrib/zstd/lib/compress/zstdmt_compress.c +202 -131
- data/contrib/zstd/lib/compress/zstdmt_compress.h +9 -6
- data/contrib/zstd/lib/decompress/huf_decompress.c +1149 -555
- data/contrib/zstd/lib/decompress/huf_decompress_amd64.S +595 -0
- data/contrib/zstd/lib/decompress/zstd_ddict.c +4 -4
- data/contrib/zstd/lib/decompress/zstd_ddict.h +1 -1
- data/contrib/zstd/lib/decompress/zstd_decompress.c +583 -106
- data/contrib/zstd/lib/decompress/zstd_decompress_block.c +1054 -379
- data/contrib/zstd/lib/decompress/zstd_decompress_block.h +14 -3
- data/contrib/zstd/lib/decompress/zstd_decompress_internal.h +56 -6
- data/contrib/zstd/lib/deprecated/zbuff.h +1 -1
- data/contrib/zstd/lib/deprecated/zbuff_common.c +1 -1
- data/contrib/zstd/lib/deprecated/zbuff_compress.c +24 -4
- data/contrib/zstd/lib/deprecated/zbuff_decompress.c +3 -1
- data/contrib/zstd/lib/dictBuilder/cover.c +60 -44
- data/contrib/zstd/lib/dictBuilder/cover.h +6 -11
- data/contrib/zstd/lib/dictBuilder/divsufsort.c +1 -1
- data/contrib/zstd/lib/dictBuilder/fastcover.c +26 -18
- data/contrib/zstd/lib/dictBuilder/zdict.c +100 -101
- data/contrib/zstd/lib/legacy/zstd_legacy.h +38 -1
- data/contrib/zstd/lib/legacy/zstd_v01.c +18 -53
- data/contrib/zstd/lib/legacy/zstd_v01.h +1 -1
- data/contrib/zstd/lib/legacy/zstd_v02.c +28 -85
- data/contrib/zstd/lib/legacy/zstd_v02.h +1 -1
- data/contrib/zstd/lib/legacy/zstd_v03.c +29 -88
- data/contrib/zstd/lib/legacy/zstd_v03.h +1 -1
- data/contrib/zstd/lib/legacy/zstd_v04.c +27 -80
- data/contrib/zstd/lib/legacy/zstd_v04.h +1 -1
- data/contrib/zstd/lib/legacy/zstd_v05.c +36 -85
- data/contrib/zstd/lib/legacy/zstd_v05.h +1 -1
- data/contrib/zstd/lib/legacy/zstd_v06.c +44 -96
- data/contrib/zstd/lib/legacy/zstd_v06.h +1 -1
- data/contrib/zstd/lib/legacy/zstd_v07.c +37 -92
- data/contrib/zstd/lib/legacy/zstd_v07.h +1 -1
- data/contrib/zstd/lib/libzstd.mk +237 -0
- data/contrib/zstd/lib/libzstd.pc.in +4 -3
- data/contrib/zstd/lib/module.modulemap +35 -0
- data/contrib/zstd/lib/{dictBuilder/zdict.h → zdict.h} +202 -33
- data/contrib/zstd/lib/zstd.h +1030 -332
- data/contrib/zstd/lib/{common/zstd_errors.h → zstd_errors.h} +27 -8
- data/ext/extconf.rb +26 -7
- data/ext/extzstd.c +51 -24
- data/ext/extzstd.h +33 -6
- data/ext/extzstd_stream.c +74 -31
- data/ext/libzstd_conf.h +0 -1
- data/ext/zstd_decompress_asm.S +1 -0
- metadata +17 -7
- data/contrib/zstd/appveyor.yml +0 -292
- data/ext/depend +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/*
|
|
2
|
-
* Copyright (c)
|
|
2
|
+
* Copyright (c) Yann Collet, Meta Platforms, Inc. and affiliates.
|
|
3
3
|
* All rights reserved.
|
|
4
4
|
*
|
|
5
5
|
* This source code is licensed under both the BSD-style license (found in the
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
#include <stddef.h> /* size_t, ptrdiff_t */
|
|
15
15
|
#include <string.h> /* memcpy */
|
|
16
16
|
#include <stdlib.h> /* malloc, free, qsort */
|
|
17
|
+
#include "../common/compiler.h"
|
|
17
18
|
#include "../common/error_private.h"
|
|
18
19
|
|
|
19
20
|
|
|
@@ -23,7 +24,7 @@
|
|
|
23
24
|
low-level memory access routines
|
|
24
25
|
Copyright (C) 2013-2015, Yann Collet.
|
|
25
26
|
|
|
26
|
-
BSD 2-Clause License (
|
|
27
|
+
BSD 2-Clause License (https://opensource.org/licenses/bsd-license.php)
|
|
27
28
|
|
|
28
29
|
Redistribution and use in source and binary forms, with or without
|
|
29
30
|
modification, are permitted provided that the following conditions are
|
|
@@ -67,15 +68,6 @@ extern "C" {
|
|
|
67
68
|
# include <stdlib.h> /* _byteswap_ulong */
|
|
68
69
|
# include <intrin.h> /* _byteswap_* */
|
|
69
70
|
#endif
|
|
70
|
-
#if defined(__GNUC__)
|
|
71
|
-
# define MEM_STATIC static __attribute__((unused))
|
|
72
|
-
#elif defined (__cplusplus) || (defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) /* C99 */)
|
|
73
|
-
# define MEM_STATIC static inline
|
|
74
|
-
#elif defined(_MSC_VER)
|
|
75
|
-
# define MEM_STATIC static __inline
|
|
76
|
-
#else
|
|
77
|
-
# define MEM_STATIC static /* this version may generate warnings for unused static functions; disable the relevant warning */
|
|
78
|
-
#endif
|
|
79
71
|
|
|
80
72
|
|
|
81
73
|
/*-**************************************************************
|
|
@@ -108,27 +100,6 @@ extern "C" {
|
|
|
108
100
|
/*-**************************************************************
|
|
109
101
|
* Memory I/O
|
|
110
102
|
*****************************************************************/
|
|
111
|
-
/* MEM_FORCE_MEMORY_ACCESS :
|
|
112
|
-
* By default, access to unaligned memory is controlled by `memcpy()`, which is safe and portable.
|
|
113
|
-
* Unfortunately, on some target/compiler combinations, the generated assembly is sub-optimal.
|
|
114
|
-
* The below switch allow to select different access method for improved performance.
|
|
115
|
-
* Method 0 (default) : use `memcpy()`. Safe and portable.
|
|
116
|
-
* Method 1 : `__packed` statement. It depends on compiler extension (ie, not portable).
|
|
117
|
-
* This method is safe if your compiler supports it, and *generally* as fast or faster than `memcpy`.
|
|
118
|
-
* Method 2 : direct access. This method is portable but violate C standard.
|
|
119
|
-
* It can generate buggy code on targets depending on alignment.
|
|
120
|
-
* In some circumstances, it's the only known way to get the most performance (ie GCC + ARMv6)
|
|
121
|
-
* See http://fastcompression.blogspot.fr/2015/08/accessing-unaligned-memory.html for details.
|
|
122
|
-
* Prefer these methods in priority order (0 > 1 > 2)
|
|
123
|
-
*/
|
|
124
|
-
#ifndef MEM_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */
|
|
125
|
-
# if defined(__GNUC__) && ( defined(__ARM_ARCH_6__) || defined(__ARM_ARCH_6J__) || defined(__ARM_ARCH_6K__) || defined(__ARM_ARCH_6Z__) || defined(__ARM_ARCH_6ZK__) || defined(__ARM_ARCH_6T2__) )
|
|
126
|
-
# define MEM_FORCE_MEMORY_ACCESS 2
|
|
127
|
-
# elif (defined(__INTEL_COMPILER) && !defined(WIN32)) || \
|
|
128
|
-
(defined(__GNUC__) && ( defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) ))
|
|
129
|
-
# define MEM_FORCE_MEMORY_ACCESS 1
|
|
130
|
-
# endif
|
|
131
|
-
#endif
|
|
132
103
|
|
|
133
104
|
MEM_STATIC unsigned MEM_32bits(void) { return sizeof(size_t)==4; }
|
|
134
105
|
MEM_STATIC unsigned MEM_64bits(void) { return sizeof(size_t)==8; }
|
|
@@ -139,33 +110,6 @@ MEM_STATIC unsigned MEM_isLittleEndian(void)
|
|
|
139
110
|
return one.c[0];
|
|
140
111
|
}
|
|
141
112
|
|
|
142
|
-
#if defined(MEM_FORCE_MEMORY_ACCESS) && (MEM_FORCE_MEMORY_ACCESS==2)
|
|
143
|
-
|
|
144
|
-
/* violates C standard, by lying on structure alignment.
|
|
145
|
-
Only use if no other choice to achieve best performance on target platform */
|
|
146
|
-
MEM_STATIC U16 MEM_read16(const void* memPtr) { return *(const U16*) memPtr; }
|
|
147
|
-
MEM_STATIC U32 MEM_read32(const void* memPtr) { return *(const U32*) memPtr; }
|
|
148
|
-
MEM_STATIC U64 MEM_read64(const void* memPtr) { return *(const U64*) memPtr; }
|
|
149
|
-
|
|
150
|
-
MEM_STATIC void MEM_write16(void* memPtr, U16 value) { *(U16*)memPtr = value; }
|
|
151
|
-
|
|
152
|
-
#elif defined(MEM_FORCE_MEMORY_ACCESS) && (MEM_FORCE_MEMORY_ACCESS==1)
|
|
153
|
-
|
|
154
|
-
/* __pack instructions are safer, but compiler specific, hence potentially problematic for some compilers */
|
|
155
|
-
/* currently only defined for gcc and icc */
|
|
156
|
-
typedef union { U16 u16; U32 u32; U64 u64; size_t st; } __attribute__((packed)) unalign;
|
|
157
|
-
|
|
158
|
-
MEM_STATIC U16 MEM_read16(const void* ptr) { return ((const unalign*)ptr)->u16; }
|
|
159
|
-
MEM_STATIC U32 MEM_read32(const void* ptr) { return ((const unalign*)ptr)->u32; }
|
|
160
|
-
MEM_STATIC U64 MEM_read64(const void* ptr) { return ((const unalign*)ptr)->u64; }
|
|
161
|
-
|
|
162
|
-
MEM_STATIC void MEM_write16(void* memPtr, U16 value) { ((unalign*)memPtr)->u16 = value; }
|
|
163
|
-
|
|
164
|
-
#else
|
|
165
|
-
|
|
166
|
-
/* default method, safe and standard.
|
|
167
|
-
can sometimes prove slower */
|
|
168
|
-
|
|
169
113
|
MEM_STATIC U16 MEM_read16(const void* memPtr)
|
|
170
114
|
{
|
|
171
115
|
U16 val; memcpy(&val, memPtr, sizeof(val)); return val;
|
|
@@ -186,9 +130,6 @@ MEM_STATIC void MEM_write16(void* memPtr, U16 value)
|
|
|
186
130
|
memcpy(memPtr, &value, sizeof(value));
|
|
187
131
|
}
|
|
188
132
|
|
|
189
|
-
|
|
190
|
-
#endif /* MEM_FORCE_MEMORY_ACCESS */
|
|
191
|
-
|
|
192
133
|
MEM_STATIC U32 MEM_swap32(U32 in)
|
|
193
134
|
{
|
|
194
135
|
#if defined(_MSC_VER) /* Visual Studio */
|
|
@@ -284,7 +225,7 @@ MEM_STATIC size_t MEM_readLEST(const void* memPtr)
|
|
|
284
225
|
Header File for static linking only
|
|
285
226
|
Copyright (C) 2014-2016, Yann Collet.
|
|
286
227
|
|
|
287
|
-
BSD 2-Clause License (
|
|
228
|
+
BSD 2-Clause License (https://opensource.org/licenses/bsd-license.php)
|
|
288
229
|
|
|
289
230
|
Redistribution and use in source and binary forms, with or without
|
|
290
231
|
modification, are permitted provided that the following conditions are
|
|
@@ -308,7 +249,7 @@ MEM_STATIC size_t MEM_readLEST(const void* memPtr)
|
|
|
308
249
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
309
250
|
|
|
310
251
|
You can contact the author at :
|
|
311
|
-
- zstd homepage :
|
|
252
|
+
- zstd homepage : https://facebook.github.io/zstd
|
|
312
253
|
*/
|
|
313
254
|
#ifndef ZSTDv06_STATIC_H
|
|
314
255
|
#define ZSTDv06_STATIC_H
|
|
@@ -415,7 +356,7 @@ ZSTDLIBv06_API size_t ZSTDv06_decompressBlock(ZSTDv06_DCtx* dctx, void* dst, siz
|
|
|
415
356
|
Header File for include
|
|
416
357
|
Copyright (C) 2014-2016, Yann Collet.
|
|
417
358
|
|
|
418
|
-
BSD 2-Clause License (
|
|
359
|
+
BSD 2-Clause License (https://opensource.org/licenses/bsd-license.php)
|
|
419
360
|
|
|
420
361
|
Redistribution and use in source and binary forms, with or without
|
|
421
362
|
modification, are permitted provided that the following conditions are
|
|
@@ -482,7 +423,7 @@ typedef enum { bt_compressed, bt_raw, bt_rle, bt_end } blockType_t;
|
|
|
482
423
|
#define MIN_SEQUENCES_SIZE 1 /* nbSeq==0 */
|
|
483
424
|
#define MIN_CBLOCK_SIZE (1 /*litCSize*/ + 1 /* RLE or RAW */ + MIN_SEQUENCES_SIZE /* nbSeq==0 */) /* for a non-null block */
|
|
484
425
|
|
|
485
|
-
#define
|
|
426
|
+
#define ZSTD_HUFFDTABLE_CAPACITY_LOG 12
|
|
486
427
|
|
|
487
428
|
#define IS_HUF 0
|
|
488
429
|
#define IS_PCH 1
|
|
@@ -622,7 +563,7 @@ void ZSTDv06_seqToCodes(const seqStore_t* seqStorePtr, size_t const nbSeq);
|
|
|
622
563
|
Public Prototypes declaration
|
|
623
564
|
Copyright (C) 2013-2016, Yann Collet.
|
|
624
565
|
|
|
625
|
-
BSD 2-Clause License (
|
|
566
|
+
BSD 2-Clause License (https://opensource.org/licenses/bsd-license.php)
|
|
626
567
|
|
|
627
568
|
Redistribution and use in source and binary forms, with or without
|
|
628
569
|
modification, are permitted provided that the following conditions are
|
|
@@ -770,7 +711,7 @@ If there is an error, the function will return an error code, which can be teste
|
|
|
770
711
|
header file (to include)
|
|
771
712
|
Copyright (C) 2013-2016, Yann Collet.
|
|
772
713
|
|
|
773
|
-
BSD 2-Clause License (
|
|
714
|
+
BSD 2-Clause License (https://opensource.org/licenses/bsd-license.php)
|
|
774
715
|
|
|
775
716
|
Redistribution and use in source and binary forms, with or without
|
|
776
717
|
modification, are permitted provided that the following conditions are
|
|
@@ -860,9 +801,8 @@ MEM_STATIC size_t BITv06_readBitsFast(BITv06_DStream_t* bitD, unsigned nbBits);
|
|
|
860
801
|
MEM_STATIC unsigned BITv06_highbit32 ( U32 val)
|
|
861
802
|
{
|
|
862
803
|
# if defined(_MSC_VER) /* Visual */
|
|
863
|
-
unsigned long r
|
|
864
|
-
_BitScanReverse
|
|
865
|
-
return (unsigned) r;
|
|
804
|
+
unsigned long r;
|
|
805
|
+
return _BitScanReverse(&r, val) ? (unsigned)r : 0;
|
|
866
806
|
# elif defined(__GNUC__) && (__GNUC__ >= 3) /* Use GCC Intrinsic */
|
|
867
807
|
return __builtin_clz (val) ^ 31;
|
|
868
808
|
# else /* Software version */
|
|
@@ -932,7 +872,7 @@ MEM_STATIC size_t BITv06_initDStream(BITv06_DStream_t* bitD, const void* srcBuff
|
|
|
932
872
|
}
|
|
933
873
|
|
|
934
874
|
/*! BITv06_lookBitsFast() :
|
|
935
|
-
* unsafe version; only works
|
|
875
|
+
* unsafe version; only works if nbBits >= 1 */
|
|
936
876
|
MEM_STATIC size_t BITv06_lookBitsFast(const BITv06_DStream_t* bitD, U32 nbBits)
|
|
937
877
|
{
|
|
938
878
|
U32 const bitMask = sizeof(bitD->bitContainer)*8 - 1;
|
|
@@ -952,7 +892,7 @@ MEM_STATIC size_t BITv06_readBits(BITv06_DStream_t* bitD, U32 nbBits)
|
|
|
952
892
|
}
|
|
953
893
|
|
|
954
894
|
/*! BITv06_readBitsFast() :
|
|
955
|
-
* unsafe version; only works
|
|
895
|
+
* unsafe version; only works if nbBits >= 1 */
|
|
956
896
|
MEM_STATIC size_t BITv06_readBitsFast(BITv06_DStream_t* bitD, U32 nbBits)
|
|
957
897
|
{
|
|
958
898
|
size_t const value = BITv06_lookBitsFast(bitD, nbBits);
|
|
@@ -1006,7 +946,7 @@ MEM_STATIC unsigned BITv06_endOfDStream(const BITv06_DStream_t* DStream)
|
|
|
1006
946
|
header file for static linking (only)
|
|
1007
947
|
Copyright (C) 2013-2015, Yann Collet
|
|
1008
948
|
|
|
1009
|
-
BSD 2-Clause License (
|
|
949
|
+
BSD 2-Clause License (https://opensource.org/licenses/bsd-license.php)
|
|
1010
950
|
|
|
1011
951
|
Redistribution and use in source and binary forms, with or without
|
|
1012
952
|
modification, are permitted provided that the following conditions are
|
|
@@ -1214,7 +1154,7 @@ MEM_STATIC BYTE FSEv06_decodeSymbolFast(FSEv06_DState_t* DStatePtr, BITv06_DStre
|
|
|
1214
1154
|
Common functions of New Generation Entropy library
|
|
1215
1155
|
Copyright (C) 2016, Yann Collet.
|
|
1216
1156
|
|
|
1217
|
-
BSD 2-Clause License (
|
|
1157
|
+
BSD 2-Clause License (https://opensource.org/licenses/bsd-license.php)
|
|
1218
1158
|
|
|
1219
1159
|
Redistribution and use in source and binary forms, with or without
|
|
1220
1160
|
modification, are permitted provided that the following conditions are
|
|
@@ -1359,7 +1299,7 @@ size_t FSEv06_readNCount (short* normalizedCounter, unsigned* maxSVPtr, unsigned
|
|
|
1359
1299
|
FSE : Finite State Entropy decoder
|
|
1360
1300
|
Copyright (C) 2013-2015, Yann Collet.
|
|
1361
1301
|
|
|
1362
|
-
BSD 2-Clause License (
|
|
1302
|
+
BSD 2-Clause License (https://opensource.org/licenses/bsd-license.php)
|
|
1363
1303
|
|
|
1364
1304
|
Redistribution and use in source and binary forms, with or without
|
|
1365
1305
|
modification, are permitted provided that the following conditions are
|
|
@@ -1683,7 +1623,7 @@ size_t FSEv06_decompress(void* dst, size_t maxDstSize, const void* cSrc, size_t
|
|
|
1683
1623
|
header file
|
|
1684
1624
|
Copyright (C) 2013-2016, Yann Collet.
|
|
1685
1625
|
|
|
1686
|
-
BSD 2-Clause License (
|
|
1626
|
+
BSD 2-Clause License (https://opensource.org/licenses/bsd-license.php)
|
|
1687
1627
|
|
|
1688
1628
|
Redistribution and use in source and binary forms, with or without
|
|
1689
1629
|
modification, are permitted provided that the following conditions are
|
|
@@ -1753,7 +1693,7 @@ size_t HUFv06_compressBound(size_t size); /**< maximum compressed size */
|
|
|
1753
1693
|
header file, for static linking only
|
|
1754
1694
|
Copyright (C) 2013-2016, Yann Collet
|
|
1755
1695
|
|
|
1756
|
-
BSD 2-Clause License (
|
|
1696
|
+
BSD 2-Clause License (https://opensource.org/licenses/bsd-license.php)
|
|
1757
1697
|
|
|
1758
1698
|
Redistribution and use in source and binary forms, with or without
|
|
1759
1699
|
modification, are permitted provided that the following conditions are
|
|
@@ -1935,7 +1875,7 @@ MEM_STATIC size_t HUFv06_readStats(BYTE* huffWeight, size_t hwSize, U32* rankSta
|
|
|
1935
1875
|
Huffman decoder, part of New Generation Entropy library
|
|
1936
1876
|
Copyright (C) 2013-2016, Yann Collet.
|
|
1937
1877
|
|
|
1938
|
-
BSD 2-Clause License (
|
|
1878
|
+
BSD 2-Clause License (https://opensource.org/licenses/bsd-license.php)
|
|
1939
1879
|
|
|
1940
1880
|
Redistribution and use in source and binary forms, with or without
|
|
1941
1881
|
modification, are permitted provided that the following conditions are
|
|
@@ -2680,7 +2620,7 @@ size_t HUFv06_decompress (void* dst, size_t dstSize, const void* cSrc, size_t cS
|
|
|
2680
2620
|
Common functions of Zstd compression library
|
|
2681
2621
|
Copyright (C) 2015-2016, Yann Collet.
|
|
2682
2622
|
|
|
2683
|
-
BSD 2-Clause License (
|
|
2623
|
+
BSD 2-Clause License (https://opensource.org/licenses/bsd-license.php)
|
|
2684
2624
|
|
|
2685
2625
|
Redistribution and use in source and binary forms, with or without
|
|
2686
2626
|
modification, are permitted provided that the following conditions are
|
|
@@ -2704,7 +2644,7 @@ size_t HUFv06_decompress (void* dst, size_t dstSize, const void* cSrc, size_t cS
|
|
|
2704
2644
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
2705
2645
|
|
|
2706
2646
|
You can contact the author at :
|
|
2707
|
-
- zstd homepage :
|
|
2647
|
+
- zstd homepage : https://facebook.github.io/zstd/
|
|
2708
2648
|
*/
|
|
2709
2649
|
|
|
2710
2650
|
|
|
@@ -2734,7 +2674,7 @@ const char* ZBUFFv06_getErrorName(size_t errorCode) { return ERR_getErrorName(er
|
|
|
2734
2674
|
zstd - standard compression library
|
|
2735
2675
|
Copyright (C) 2014-2016, Yann Collet.
|
|
2736
2676
|
|
|
2737
|
-
BSD 2-Clause License (
|
|
2677
|
+
BSD 2-Clause License (https://opensource.org/licenses/bsd-license.php)
|
|
2738
2678
|
|
|
2739
2679
|
Redistribution and use in source and binary forms, with or without
|
|
2740
2680
|
modification, are permitted provided that the following conditions are
|
|
@@ -2758,7 +2698,7 @@ const char* ZBUFFv06_getErrorName(size_t errorCode) { return ERR_getErrorName(er
|
|
|
2758
2698
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
2759
2699
|
|
|
2760
2700
|
You can contact the author at :
|
|
2761
|
-
- zstd homepage :
|
|
2701
|
+
- zstd homepage : https://facebook.github.io/zstd
|
|
2762
2702
|
*/
|
|
2763
2703
|
|
|
2764
2704
|
/* ***************************************************************
|
|
@@ -2810,7 +2750,7 @@ struct ZSTDv06_DCtx_s
|
|
|
2810
2750
|
FSEv06_DTable LLTable[FSEv06_DTABLE_SIZE_U32(LLFSELog)];
|
|
2811
2751
|
FSEv06_DTable OffTable[FSEv06_DTABLE_SIZE_U32(OffFSELog)];
|
|
2812
2752
|
FSEv06_DTable MLTable[FSEv06_DTABLE_SIZE_U32(MLFSELog)];
|
|
2813
|
-
unsigned hufTableX4[HUFv06_DTABLE_SIZE(
|
|
2753
|
+
unsigned hufTableX4[HUFv06_DTABLE_SIZE(ZSTD_HUFFDTABLE_CAPACITY_LOG)];
|
|
2814
2754
|
const void* previousDstEnd;
|
|
2815
2755
|
const void* base;
|
|
2816
2756
|
const void* vBase;
|
|
@@ -2838,7 +2778,7 @@ size_t ZSTDv06_decompressBegin(ZSTDv06_DCtx* dctx)
|
|
|
2838
2778
|
dctx->base = NULL;
|
|
2839
2779
|
dctx->vBase = NULL;
|
|
2840
2780
|
dctx->dictEnd = NULL;
|
|
2841
|
-
dctx->hufTableX4[0] =
|
|
2781
|
+
dctx->hufTableX4[0] = ZSTD_HUFFDTABLE_CAPACITY_LOG;
|
|
2842
2782
|
dctx->flagRepeatTable = 0;
|
|
2843
2783
|
return 0;
|
|
2844
2784
|
}
|
|
@@ -3029,7 +2969,7 @@ typedef struct
|
|
|
3029
2969
|
* Provides the size of compressed block from block header `src` */
|
|
3030
2970
|
static size_t ZSTDv06_getcBlockSize(const void* src, size_t srcSize, blockProperties_t* bpPtr)
|
|
3031
2971
|
{
|
|
3032
|
-
const BYTE* const in = (const BYTE*
|
|
2972
|
+
const BYTE* const in = (const BYTE*)src;
|
|
3033
2973
|
U32 cSize;
|
|
3034
2974
|
|
|
3035
2975
|
if (srcSize < ZSTDv06_blockHeaderSize) return ERROR(srcSize_wrong);
|
|
@@ -3223,7 +3163,7 @@ static size_t ZSTDv06_decodeSeqHeaders(int* nbSeqPtr,
|
|
|
3223
3163
|
FSEv06_DTable* DTableLL, FSEv06_DTable* DTableML, FSEv06_DTable* DTableOffb, U32 flagRepeatTable,
|
|
3224
3164
|
const void* src, size_t srcSize)
|
|
3225
3165
|
{
|
|
3226
|
-
const BYTE* const istart = (const BYTE*
|
|
3166
|
+
const BYTE* const istart = (const BYTE*)src;
|
|
3227
3167
|
const BYTE* const iend = istart + srcSize;
|
|
3228
3168
|
const BYTE* ip = istart;
|
|
3229
3169
|
|
|
@@ -3374,13 +3314,19 @@ static size_t ZSTDv06_execSequence(BYTE* op,
|
|
|
3374
3314
|
const BYTE* const iLitEnd = *litPtr + sequence.litLength;
|
|
3375
3315
|
const BYTE* match = oLitEnd - sequence.offset;
|
|
3376
3316
|
|
|
3377
|
-
/*
|
|
3378
|
-
|
|
3317
|
+
/* checks */
|
|
3318
|
+
size_t const seqLength = sequence.litLength + sequence.matchLength;
|
|
3319
|
+
|
|
3320
|
+
if (seqLength > (size_t)(oend - op)) return ERROR(dstSize_tooSmall);
|
|
3321
|
+
if (sequence.litLength > (size_t)(litLimit - *litPtr)) return ERROR(corruption_detected);
|
|
3322
|
+
/* Now we know there are no overflow in literal nor match lengths, can use pointer checks */
|
|
3323
|
+
if (oLitEnd > oend_8) return ERROR(dstSize_tooSmall);
|
|
3324
|
+
|
|
3379
3325
|
if (oMatchEnd > oend) return ERROR(dstSize_tooSmall); /* overwrite beyond dst buffer */
|
|
3380
|
-
if (iLitEnd > litLimit) return ERROR(corruption_detected); /*
|
|
3326
|
+
if (iLitEnd > litLimit) return ERROR(corruption_detected); /* overRead beyond lit buffer */
|
|
3381
3327
|
|
|
3382
3328
|
/* copy Literals */
|
|
3383
|
-
ZSTDv06_wildcopy(op, *litPtr, sequence.litLength); /* note : oLitEnd <= oend-8 : no risk of overwrite beyond oend */
|
|
3329
|
+
ZSTDv06_wildcopy(op, *litPtr, (ptrdiff_t)sequence.litLength); /* note : oLitEnd <= oend-8 : no risk of overwrite beyond oend */
|
|
3384
3330
|
op = oLitEnd;
|
|
3385
3331
|
*litPtr = iLitEnd; /* update for next sequence */
|
|
3386
3332
|
|
|
@@ -3445,7 +3391,7 @@ static size_t ZSTDv06_decompressSequences(
|
|
|
3445
3391
|
{
|
|
3446
3392
|
const BYTE* ip = (const BYTE*)seqStart;
|
|
3447
3393
|
const BYTE* const iend = ip + seqSize;
|
|
3448
|
-
BYTE* const ostart = (BYTE*
|
|
3394
|
+
BYTE* const ostart = (BYTE*)dst;
|
|
3449
3395
|
BYTE* const oend = ostart + maxDstSize;
|
|
3450
3396
|
BYTE* op = ostart;
|
|
3451
3397
|
const BYTE* litPtr = dctx->litPtr;
|
|
@@ -3561,7 +3507,7 @@ static size_t ZSTDv06_decompressFrame(ZSTDv06_DCtx* dctx,
|
|
|
3561
3507
|
{
|
|
3562
3508
|
const BYTE* ip = (const BYTE*)src;
|
|
3563
3509
|
const BYTE* const iend = ip + srcSize;
|
|
3564
|
-
BYTE* const ostart = (BYTE*
|
|
3510
|
+
BYTE* const ostart = (BYTE*)dst;
|
|
3565
3511
|
BYTE* op = ostart;
|
|
3566
3512
|
BYTE* const oend = ostart + dstCapacity;
|
|
3567
3513
|
size_t remainingSize = srcSize;
|
|
@@ -3791,6 +3737,7 @@ size_t ZSTDv06_decompressContinue(ZSTDv06_DCtx* dctx, void* dst, size_t dstCapac
|
|
|
3791
3737
|
}
|
|
3792
3738
|
dctx->stage = ZSTDds_decodeBlockHeader;
|
|
3793
3739
|
dctx->expected = ZSTDv06_blockHeaderSize;
|
|
3740
|
+
if (ZSTDv06_isError(rSize)) return rSize;
|
|
3794
3741
|
dctx->previousDstEnd = (char*)dst + rSize;
|
|
3795
3742
|
return rSize;
|
|
3796
3743
|
}
|
|
@@ -3893,7 +3840,7 @@ size_t ZSTDv06_decompressBegin_usingDict(ZSTDv06_DCtx* dctx, const void* dict, s
|
|
|
3893
3840
|
Buffered version of Zstd compression library
|
|
3894
3841
|
Copyright (C) 2015-2016, Yann Collet.
|
|
3895
3842
|
|
|
3896
|
-
BSD 2-Clause License (
|
|
3843
|
+
BSD 2-Clause License (https://opensource.org/licenses/bsd-license.php)
|
|
3897
3844
|
|
|
3898
3845
|
Redistribution and use in source and binary forms, with or without
|
|
3899
3846
|
modification, are permitted provided that the following conditions are
|
|
@@ -3917,7 +3864,7 @@ size_t ZSTDv06_decompressBegin_usingDict(ZSTDv06_DCtx* dctx, const void* dict, s
|
|
|
3917
3864
|
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
3918
3865
|
|
|
3919
3866
|
You can contact the author at :
|
|
3920
|
-
- zstd homepage :
|
|
3867
|
+
- zstd homepage : https://facebook.github.io/zstd/
|
|
3921
3868
|
*/
|
|
3922
3869
|
|
|
3923
3870
|
|
|
@@ -4039,7 +3986,8 @@ size_t ZBUFFv06_decompressContinue(ZBUFFv06_DCtx* zbd,
|
|
|
4039
3986
|
size_t const toLoad = hSize - zbd->lhSize; /* if hSize!=0, hSize > zbd->lhSize */
|
|
4040
3987
|
if (ZSTDv06_isError(hSize)) return hSize;
|
|
4041
3988
|
if (toLoad > (size_t)(iend-ip)) { /* not enough input to load full header */
|
|
4042
|
-
|
|
3989
|
+
if (ip != NULL)
|
|
3990
|
+
memcpy(zbd->headerBuffer + zbd->lhSize, ip, iend-ip);
|
|
4043
3991
|
zbd->lhSize += iend-ip;
|
|
4044
3992
|
*dstCapacityPtr = 0;
|
|
4045
3993
|
return (hSize - zbd->lhSize) + ZSTDv06_blockHeaderSize; /* remaining header bytes + next block header */
|