extzstd 0.0.3.CONCEPT-x86-mingw32 → 0.1-x86-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/HISTORY.ja +5 -0
- data/LICENSE +6 -6
- data/README.md +35 -22
- data/contrib/zstd/LICENSE +13 -9
- data/contrib/zstd/README.md +37 -44
- data/contrib/zstd/common/entropy_common.c +33 -39
- data/contrib/zstd/common/error_private.c +43 -0
- data/contrib/zstd/common/error_private.h +11 -60
- data/contrib/zstd/common/fse.h +11 -5
- data/contrib/zstd/common/fse_decompress.c +14 -16
- data/contrib/zstd/common/huf.h +1 -1
- data/contrib/zstd/common/mem.h +36 -43
- data/contrib/zstd/common/xxhash.c +31 -18
- data/contrib/zstd/common/xxhash.h +71 -35
- data/contrib/zstd/common/zbuff.h +29 -35
- data/contrib/zstd/common/zstd_common.c +24 -32
- data/contrib/zstd/common/zstd_errors.h +60 -0
- data/contrib/zstd/common/zstd_internal.h +109 -80
- data/contrib/zstd/compress/fse_compress.c +9 -6
- data/contrib/zstd/compress/huf_compress.c +30 -74
- data/contrib/zstd/compress/zbuff_compress.c +43 -51
- data/contrib/zstd/compress/zstd_compress.c +953 -763
- data/contrib/zstd/compress/zstd_opt.h +115 -261
- data/contrib/zstd/decompress/huf_decompress.c +29 -40
- data/contrib/zstd/decompress/zbuff_decompress.c +36 -78
- data/contrib/zstd/decompress/zstd_decompress.c +976 -496
- data/contrib/zstd/dictBuilder/divsufsort.h +5 -5
- data/contrib/zstd/dictBuilder/zdict.c +194 -229
- data/contrib/zstd/dictBuilder/zdict.h +66 -68
- data/contrib/zstd/legacy/zstd_legacy.h +168 -49
- data/contrib/zstd/legacy/zstd_v01.c +95 -178
- data/contrib/zstd/legacy/zstd_v01.h +12 -32
- data/contrib/zstd/legacy/zstd_v02.c +48 -274
- data/contrib/zstd/legacy/zstd_v02.h +12 -32
- data/contrib/zstd/legacy/zstd_v03.c +48 -274
- data/contrib/zstd/legacy/zstd_v03.h +12 -32
- data/contrib/zstd/legacy/zstd_v04.c +63 -320
- data/contrib/zstd/legacy/zstd_v04.h +13 -33
- data/contrib/zstd/legacy/zstd_v05.c +80 -345
- data/contrib/zstd/legacy/zstd_v05.h +9 -31
- data/contrib/zstd/legacy/zstd_v06.c +48 -458
- data/contrib/zstd/legacy/zstd_v06.h +41 -67
- data/contrib/zstd/legacy/zstd_v07.c +4544 -0
- data/contrib/zstd/legacy/zstd_v07.h +173 -0
- data/contrib/zstd/zstd.h +640 -0
- data/ext/extconf.rb +7 -3
- data/ext/extzstd.c +263 -106
- data/ext/extzstd.h +8 -6
- data/ext/extzstd_nogvls.h +0 -117
- data/ext/extzstd_stream.c +347 -0
- data/ext/zstd_common.c +8 -0
- data/ext/zstd_compress.c +6 -0
- data/ext/zstd_decompress.c +5 -0
- data/ext/zstd_dictbuilder.c +5 -0
- data/ext/zstd_legacy_v07.c +1 -0
- data/gemstub.rb +18 -16
- data/lib/2.1/extzstd.so +0 -0
- data/lib/2.2/extzstd.so +0 -0
- data/lib/2.3/extzstd.so +0 -0
- data/lib/extzstd/version.rb +1 -1
- data/lib/extzstd.rb +77 -43
- data/test/test_basic.rb +11 -6
- metadata +23 -11
- data/contrib/zstd/common/error_public.h +0 -77
- data/contrib/zstd/common/zstd.h +0 -475
- data/ext/extzstd_buffered.c +0 -265
- data/ext/zstd_amalgam.c +0 -18
- data/lib/2.0/extzstd.so +0 -0
@@ -1,43 +1,19 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
met:
|
11
|
-
|
12
|
-
* Redistributions of source code must retain the above copyright
|
13
|
-
notice, this list of conditions and the following disclaimer.
|
14
|
-
* Redistributions in binary form must reproduce the above
|
15
|
-
copyright notice, this list of conditions and the following disclaimer
|
16
|
-
in the documentation and/or other materials provided with the
|
17
|
-
distribution.
|
18
|
-
|
19
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
20
|
-
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
21
|
-
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
22
|
-
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
23
|
-
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
24
|
-
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
25
|
-
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
26
|
-
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
27
|
-
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
28
|
-
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
29
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
30
|
-
|
31
|
-
You can contact the author at :
|
32
|
-
- Source repository : https://github.com/Cyan4973/FiniteStateEntropy
|
33
|
-
- Public forum : https://groups.google.com/forum/#!forum/lz4c
|
34
|
-
****************************************************************** */
|
1
|
+
/**
|
2
|
+
* Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
|
3
|
+
* All rights reserved.
|
4
|
+
*
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
6
|
+
* LICENSE file in the root directory of this source tree. An additional grant
|
7
|
+
* of patent rights can be found in the PATENTS file in the same directory.
|
8
|
+
*/
|
9
|
+
|
35
10
|
|
36
11
|
/******************************************
|
37
12
|
* Includes
|
38
13
|
******************************************/
|
39
14
|
#include <stddef.h> /* size_t, ptrdiff_t */
|
40
15
|
#include "zstd_v01.h"
|
16
|
+
#include "error_private.h"
|
41
17
|
|
42
18
|
|
43
19
|
/******************************************
|
@@ -164,11 +140,15 @@ typedef struct
|
|
164
140
|
# pragma warning(disable : 4214) /* disable: C4214: non-int bitfields */
|
165
141
|
#else
|
166
142
|
# define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
|
167
|
-
#
|
168
|
-
#
|
143
|
+
# if defined (__cplusplus) || defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 */
|
144
|
+
# ifdef __GNUC__
|
145
|
+
# define FORCE_INLINE static inline __attribute__((always_inline))
|
146
|
+
# else
|
147
|
+
# define FORCE_INLINE static inline
|
148
|
+
# endif
|
169
149
|
# else
|
170
|
-
# define FORCE_INLINE static
|
171
|
-
# endif
|
150
|
+
# define FORCE_INLINE static
|
151
|
+
# endif /* __STDC_VERSION__ */
|
172
152
|
#endif
|
173
153
|
|
174
154
|
|
@@ -225,7 +205,7 @@ typedef signed long long S64;
|
|
225
205
|
#ifndef FSE_FORCE_MEMORY_ACCESS /* can be defined externally, on command line for example */
|
226
206
|
# 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__) )
|
227
207
|
# define FSE_FORCE_MEMORY_ACCESS 2
|
228
|
-
# elif defined(__INTEL_COMPILER) || \
|
208
|
+
# elif (defined(__INTEL_COMPILER) && !defined(WIN32)) || \
|
229
209
|
(defined(__GNUC__) && ( defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || defined(__ARM_ARCH_7R__) || defined(__ARM_ARCH_7M__) || defined(__ARM_ARCH_7S__) ))
|
230
210
|
# define FSE_FORCE_MEMORY_ACCESS 1
|
231
211
|
# endif
|
@@ -978,13 +958,16 @@ static size_t HUF_readDTable (U16* DTable, const void* src, size_t srcSize)
|
|
978
958
|
U32 weightTotal;
|
979
959
|
U32 maxBits;
|
980
960
|
const BYTE* ip = (const BYTE*) src;
|
981
|
-
size_t iSize
|
961
|
+
size_t iSize;
|
982
962
|
size_t oSize;
|
983
963
|
U32 n;
|
984
964
|
U32 nextRankStart;
|
985
965
|
void* ptr = DTable+1;
|
986
966
|
HUF_DElt* const dt = (HUF_DElt*)ptr;
|
987
967
|
|
968
|
+
if (!srcSize) return (size_t)-FSE_ERROR_srcSize_wrong;
|
969
|
+
iSize = ip[0];
|
970
|
+
|
988
971
|
FSE_STATIC_ASSERT(sizeof(HUF_DElt) == sizeof(U16)); /* if compilation fails here, assertion is false */
|
989
972
|
//memset(huffWeight, 0, sizeof(huffWeight)); /* should not be necessary, but some analyzer complain ... */
|
990
973
|
if (iSize >= 128) /* special header */
|
@@ -1025,6 +1008,7 @@ static size_t HUF_readDTable (U16* DTable, const void* src, size_t srcSize)
|
|
1025
1008
|
rankVal[huffWeight[n]]++;
|
1026
1009
|
weightTotal += (1 << huffWeight[n]) >> 1;
|
1027
1010
|
}
|
1011
|
+
if (weightTotal == 0) return (size_t)-FSE_ERROR_corruptionDetected;
|
1028
1012
|
|
1029
1013
|
/* get last non-null symbol weight (implied, total must be 2^n) */
|
1030
1014
|
maxBits = FSE_highbit32(weightTotal) + 1;
|
@@ -1196,57 +1180,6 @@ static size_t HUF_decompress (void* dst, size_t maxDstSize, const void* cSrc, si
|
|
1196
1180
|
|
1197
1181
|
#endif /* FSE_COMMONDEFS_ONLY */
|
1198
1182
|
|
1199
|
-
/*
|
1200
|
-
zstd - standard compression library
|
1201
|
-
Header File for static linking only
|
1202
|
-
Copyright (C) 2014-2015, Yann Collet.
|
1203
|
-
|
1204
|
-
BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
|
1205
|
-
|
1206
|
-
Redistribution and use in source and binary forms, with or without
|
1207
|
-
modification, are permitted provided that the following conditions are
|
1208
|
-
met:
|
1209
|
-
* Redistributions of source code must retain the above copyright
|
1210
|
-
notice, this list of conditions and the following disclaimer.
|
1211
|
-
* Redistributions in binary form must reproduce the above
|
1212
|
-
copyright notice, this list of conditions and the following disclaimer
|
1213
|
-
in the documentation and/or other materials provided with the
|
1214
|
-
distribution.
|
1215
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
1216
|
-
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
1217
|
-
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
1218
|
-
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
1219
|
-
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
1220
|
-
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
1221
|
-
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
1222
|
-
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
1223
|
-
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
1224
|
-
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
1225
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
1226
|
-
|
1227
|
-
You can contact the author at :
|
1228
|
-
- zstd source repository : https://github.com/Cyan4973/zstd
|
1229
|
-
- ztsd public forum : https://groups.google.com/forum/#!forum/lz4c
|
1230
|
-
*/
|
1231
|
-
|
1232
|
-
/* The objects defined into this file should be considered experimental.
|
1233
|
-
* They are not labelled stable, as their prototype may change in the future.
|
1234
|
-
* You can use them for tests, provide feedback, or if you can endure risk of future changes.
|
1235
|
-
*/
|
1236
|
-
|
1237
|
-
/**************************************
|
1238
|
-
* Error management
|
1239
|
-
**************************************/
|
1240
|
-
#define ZSTD_LIST_ERRORS(ITEM) \
|
1241
|
-
ITEM(ZSTD_OK_NoError) ITEM(ZSTD_ERROR_GENERIC) \
|
1242
|
-
ITEM(ZSTD_ERROR_MagicNumber) \
|
1243
|
-
ITEM(ZSTD_ERROR_SrcSize) ITEM(ZSTD_ERROR_maxDstSize_tooSmall) \
|
1244
|
-
ITEM(ZSTD_ERROR_corruption) \
|
1245
|
-
ITEM(ZSTD_ERROR_maxCode)
|
1246
|
-
|
1247
|
-
#define ZSTD_GENERATE_ENUM(ENUM) ENUM,
|
1248
|
-
typedef enum { ZSTD_LIST_ERRORS(ZSTD_GENERATE_ENUM) } ZSTD_errorCodes; /* exposed list of errors; static linking only */
|
1249
|
-
|
1250
1183
|
/*
|
1251
1184
|
zstd - standard compression library
|
1252
1185
|
Copyright (C) 2014-2015, Yann Collet.
|
@@ -1325,17 +1258,9 @@ typedef enum { ZSTD_LIST_ERRORS(ZSTD_GENERATE_ENUM) } ZSTD_errorCodes; /* expo
|
|
1325
1258
|
#endif
|
1326
1259
|
|
1327
1260
|
#ifdef _MSC_VER /* Visual Studio */
|
1328
|
-
# define FORCE_INLINE static __forceinline
|
1329
1261
|
# include <intrin.h> /* For Visual 2005 */
|
1330
1262
|
# pragma warning(disable : 4127) /* disable: C4127: conditional expression is constant */
|
1331
1263
|
# pragma warning(disable : 4324) /* disable: C4324: padded structure */
|
1332
|
-
#else
|
1333
|
-
# define GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
|
1334
|
-
# ifdef __GNUC__
|
1335
|
-
# define FORCE_INLINE static inline __attribute__((always_inline))
|
1336
|
-
# else
|
1337
|
-
# define FORCE_INLINE static inline
|
1338
|
-
# endif
|
1339
1264
|
#endif
|
1340
1265
|
|
1341
1266
|
|
@@ -1516,11 +1441,8 @@ typedef struct ZSTD_Cctx_s
|
|
1516
1441
|
/**************************************
|
1517
1442
|
* Error Management
|
1518
1443
|
**************************************/
|
1519
|
-
/* tells if a return value is an error code */
|
1520
|
-
static unsigned ZSTD_isError(size_t code) { return (code > (size_t)(-ZSTD_ERROR_maxCode)); }
|
1521
|
-
|
1522
1444
|
/* published entry point */
|
1523
|
-
unsigned ZSTDv01_isError(size_t code) { return
|
1445
|
+
unsigned ZSTDv01_isError(size_t code) { return ERR_isError(code); }
|
1524
1446
|
|
1525
1447
|
|
1526
1448
|
/**************************************
|
@@ -1535,13 +1457,13 @@ unsigned ZSTDv01_isError(size_t code) { return ZSTD_isError(code); }
|
|
1535
1457
|
* Decompression code
|
1536
1458
|
**************************************************************/
|
1537
1459
|
|
1538
|
-
|
1460
|
+
size_t ZSTDv01_getcBlockSize(const void* src, size_t srcSize, blockProperties_t* bpPtr)
|
1539
1461
|
{
|
1540
1462
|
const BYTE* const in = (const BYTE* const)src;
|
1541
1463
|
BYTE headerFlags;
|
1542
1464
|
U32 cSize;
|
1543
1465
|
|
1544
|
-
if (srcSize < 3) return (
|
1466
|
+
if (srcSize < 3) return ERROR(srcSize_wrong);
|
1545
1467
|
|
1546
1468
|
headerFlags = *in;
|
1547
1469
|
cSize = in[2] + (in[1]<<8) + ((in[0] & 7)<<16);
|
@@ -1557,7 +1479,7 @@ static size_t ZSTD_getcBlockSize(const void* src, size_t srcSize, blockPropertie
|
|
1557
1479
|
|
1558
1480
|
static size_t ZSTD_copyUncompressedBlock(void* dst, size_t maxDstSize, const void* src, size_t srcSize)
|
1559
1481
|
{
|
1560
|
-
if (srcSize > maxDstSize) return (
|
1482
|
+
if (srcSize > maxDstSize) return ERROR(dstSize_tooSmall);
|
1561
1483
|
memcpy(dst, src, srcSize);
|
1562
1484
|
return srcSize;
|
1563
1485
|
}
|
@@ -1574,21 +1496,21 @@ static size_t ZSTD_decompressLiterals(void* ctx,
|
|
1574
1496
|
size_t litSize;
|
1575
1497
|
|
1576
1498
|
/* check : minimum 2, for litSize, +1, for content */
|
1577
|
-
if (srcSize <= 3) return (
|
1499
|
+
if (srcSize <= 3) return ERROR(corruption_detected);
|
1578
1500
|
|
1579
1501
|
litSize = ip[1] + (ip[0]<<8);
|
1580
1502
|
litSize += ((ip[-3] >> 3) & 7) << 16; // mmmmh....
|
1581
1503
|
op = oend - litSize;
|
1582
1504
|
|
1583
1505
|
(void)ctx;
|
1584
|
-
if (litSize > maxDstSize) return (
|
1506
|
+
if (litSize > maxDstSize) return ERROR(dstSize_tooSmall);
|
1585
1507
|
errorCode = HUF_decompress(op, litSize, ip+2, srcSize-2);
|
1586
|
-
if (FSE_isError(errorCode)) return (
|
1508
|
+
if (FSE_isError(errorCode)) return ERROR(GENERIC);
|
1587
1509
|
return litSize;
|
1588
1510
|
}
|
1589
1511
|
|
1590
1512
|
|
1591
|
-
|
1513
|
+
size_t ZSTDv01_decodeLiteralsBlock(void* ctx,
|
1592
1514
|
void* dst, size_t maxDstSize,
|
1593
1515
|
const BYTE** litStart, size_t* litSize,
|
1594
1516
|
const void* src, size_t srcSize)
|
@@ -1599,9 +1521,9 @@ static size_t ZSTD_decodeLiteralsBlock(void* ctx,
|
|
1599
1521
|
BYTE* const oend = ostart + maxDstSize;
|
1600
1522
|
blockProperties_t litbp;
|
1601
1523
|
|
1602
|
-
size_t litcSize =
|
1603
|
-
if (
|
1604
|
-
if (litcSize > srcSize - ZSTD_blockHeaderSize) return (
|
1524
|
+
size_t litcSize = ZSTDv01_getcBlockSize(src, srcSize, &litbp);
|
1525
|
+
if (ZSTDv01_isError(litcSize)) return litcSize;
|
1526
|
+
if (litcSize > srcSize - ZSTD_blockHeaderSize) return ERROR(srcSize_wrong);
|
1605
1527
|
ip += ZSTD_blockHeaderSize;
|
1606
1528
|
|
1607
1529
|
switch(litbp.blockType)
|
@@ -1614,7 +1536,8 @@ static size_t ZSTD_decodeLiteralsBlock(void* ctx,
|
|
1614
1536
|
case bt_rle:
|
1615
1537
|
{
|
1616
1538
|
size_t rleSize = litbp.origSize;
|
1617
|
-
if (rleSize>maxDstSize) return (
|
1539
|
+
if (rleSize>maxDstSize) return ERROR(dstSize_tooSmall);
|
1540
|
+
if (!srcSize) return ERROR(srcSize_wrong);
|
1618
1541
|
memset(oend - rleSize, *ip, rleSize);
|
1619
1542
|
*litStart = oend - rleSize;
|
1620
1543
|
*litSize = rleSize;
|
@@ -1624,7 +1547,7 @@ static size_t ZSTD_decodeLiteralsBlock(void* ctx,
|
|
1624
1547
|
case bt_compressed:
|
1625
1548
|
{
|
1626
1549
|
size_t decodedLitSize = ZSTD_decompressLiterals(ctx, dst, maxDstSize, ip, litcSize);
|
1627
|
-
if (
|
1550
|
+
if (ZSTDv01_isError(decodedLitSize)) return decodedLitSize;
|
1628
1551
|
*litStart = oend - decodedLitSize;
|
1629
1552
|
*litSize = decodedLitSize;
|
1630
1553
|
ip += litcSize;
|
@@ -1632,14 +1555,14 @@ static size_t ZSTD_decodeLiteralsBlock(void* ctx,
|
|
1632
1555
|
}
|
1633
1556
|
case bt_end:
|
1634
1557
|
default:
|
1635
|
-
return (
|
1558
|
+
return ERROR(GENERIC);
|
1636
1559
|
}
|
1637
1560
|
|
1638
1561
|
return ip-istart;
|
1639
1562
|
}
|
1640
1563
|
|
1641
1564
|
|
1642
|
-
|
1565
|
+
size_t ZSTDv01_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* dumpsLengthPtr,
|
1643
1566
|
FSE_DTable* DTableLL, FSE_DTable* DTableML, FSE_DTable* DTableOffb,
|
1644
1567
|
const void* src, size_t srcSize)
|
1645
1568
|
{
|
@@ -1651,7 +1574,7 @@ static size_t ZSTD_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* d
|
|
1651
1574
|
size_t dumpsLength;
|
1652
1575
|
|
1653
1576
|
/* check */
|
1654
|
-
if (srcSize < 5) return (
|
1577
|
+
if (srcSize < 5) return ERROR(srcSize_wrong);
|
1655
1578
|
|
1656
1579
|
/* SeqHead */
|
1657
1580
|
*nbSeq = ZSTD_readLE16(ip); ip+=2;
|
@@ -1675,7 +1598,7 @@ static size_t ZSTD_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* d
|
|
1675
1598
|
*dumpsLengthPtr = dumpsLength;
|
1676
1599
|
|
1677
1600
|
/* check */
|
1678
|
-
if (ip > iend-3) return (
|
1601
|
+
if (ip > iend-3) return ERROR(srcSize_wrong); /* min : all 3 are "raw", hence no header, but at least xxLog bits per type */
|
1679
1602
|
|
1680
1603
|
/* sequences */
|
1681
1604
|
{
|
@@ -1685,7 +1608,6 @@ static size_t ZSTD_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* d
|
|
1685
1608
|
/* Build DTables */
|
1686
1609
|
switch(LLtype)
|
1687
1610
|
{
|
1688
|
-
U32 max;
|
1689
1611
|
case bt_rle :
|
1690
1612
|
LLlog = 0;
|
1691
1613
|
FSE_buildDTable_rle(DTableLL, *ip++); break;
|
@@ -1693,52 +1615,49 @@ static size_t ZSTD_decodeSeqHeaders(int* nbSeq, const BYTE** dumpsPtr, size_t* d
|
|
1693
1615
|
LLlog = LLbits;
|
1694
1616
|
FSE_buildDTable_raw(DTableLL, LLbits); break;
|
1695
1617
|
default :
|
1696
|
-
max = MaxLL;
|
1697
|
-
|
1698
|
-
|
1699
|
-
|
1700
|
-
|
1701
|
-
|
1702
|
-
}
|
1618
|
+
{ U32 max = MaxLL;
|
1619
|
+
headerSize = FSE_readNCount(norm, &max, &LLlog, ip, iend-ip);
|
1620
|
+
if (FSE_isError(headerSize)) return ERROR(GENERIC);
|
1621
|
+
if (LLlog > LLFSELog) return ERROR(corruption_detected);
|
1622
|
+
ip += headerSize;
|
1623
|
+
FSE_buildDTable(DTableLL, norm, max, LLlog);
|
1624
|
+
} }
|
1703
1625
|
|
1704
1626
|
switch(Offtype)
|
1705
1627
|
{
|
1706
|
-
U32 max;
|
1707
1628
|
case bt_rle :
|
1708
1629
|
Offlog = 0;
|
1709
|
-
if (ip > iend-2) return (
|
1630
|
+
if (ip > iend-2) return ERROR(srcSize_wrong); /* min : "raw", hence no header, but at least xxLog bits */
|
1710
1631
|
FSE_buildDTable_rle(DTableOffb, *ip++); break;
|
1711
1632
|
case bt_raw :
|
1712
1633
|
Offlog = Offbits;
|
1713
1634
|
FSE_buildDTable_raw(DTableOffb, Offbits); break;
|
1714
1635
|
default :
|
1715
|
-
max = MaxOff;
|
1716
|
-
|
1717
|
-
|
1718
|
-
|
1719
|
-
|
1720
|
-
|
1721
|
-
}
|
1636
|
+
{ U32 max = MaxOff;
|
1637
|
+
headerSize = FSE_readNCount(norm, &max, &Offlog, ip, iend-ip);
|
1638
|
+
if (FSE_isError(headerSize)) return ERROR(GENERIC);
|
1639
|
+
if (Offlog > OffFSELog) return ERROR(corruption_detected);
|
1640
|
+
ip += headerSize;
|
1641
|
+
FSE_buildDTable(DTableOffb, norm, max, Offlog);
|
1642
|
+
} }
|
1722
1643
|
|
1723
1644
|
switch(MLtype)
|
1724
1645
|
{
|
1725
|
-
U32 max;
|
1726
1646
|
case bt_rle :
|
1727
1647
|
MLlog = 0;
|
1728
|
-
if (ip > iend-2) return (
|
1648
|
+
if (ip > iend-2) return ERROR(srcSize_wrong); /* min : "raw", hence no header, but at least xxLog bits */
|
1729
1649
|
FSE_buildDTable_rle(DTableML, *ip++); break;
|
1730
1650
|
case bt_raw :
|
1731
1651
|
MLlog = MLbits;
|
1732
1652
|
FSE_buildDTable_raw(DTableML, MLbits); break;
|
1733
1653
|
default :
|
1734
|
-
max = MaxML;
|
1735
|
-
|
1736
|
-
|
1737
|
-
|
1738
|
-
|
1739
|
-
|
1740
|
-
|
1741
|
-
}
|
1654
|
+
{ U32 max = MaxML;
|
1655
|
+
headerSize = FSE_readNCount(norm, &max, &MLlog, ip, iend-ip);
|
1656
|
+
if (FSE_isError(headerSize)) return ERROR(GENERIC);
|
1657
|
+
if (MLlog > MLFSELog) return ERROR(corruption_detected);
|
1658
|
+
ip += headerSize;
|
1659
|
+
FSE_buildDTable(DTableML, norm, max, MLlog);
|
1660
|
+
} } }
|
1742
1661
|
|
1743
1662
|
return ip-istart;
|
1744
1663
|
}
|
@@ -1838,9 +1757,9 @@ static size_t ZSTD_execSequence(BYTE* op,
|
|
1838
1757
|
const BYTE* const litEnd = *litPtr + litLength;
|
1839
1758
|
|
1840
1759
|
/* check */
|
1841
|
-
if (endMatch > oend) return (
|
1842
|
-
if (litEnd > litLimit) return (
|
1843
|
-
if (sequence.matchLength > (size_t)(*litPtr-op)) return (
|
1760
|
+
if (endMatch > oend) return ERROR(dstSize_tooSmall); /* overwrite beyond dst buffer */
|
1761
|
+
if (litEnd > litLimit) return ERROR(corruption_detected);
|
1762
|
+
if (sequence.matchLength > (size_t)(*litPtr-op)) return ERROR(dstSize_tooSmall); /* overwrite literal segment */
|
1844
1763
|
|
1845
1764
|
/* copy Literals */
|
1846
1765
|
if (((size_t)(*litPtr - op) < 8) || ((size_t)(oend-litEnd) < 8) || (op+litLength > oend-8))
|
@@ -1851,7 +1770,7 @@ static size_t ZSTD_execSequence(BYTE* op,
|
|
1851
1770
|
*litPtr = litEnd; /* update for next sequence */
|
1852
1771
|
|
1853
1772
|
/* check : last match must be at a minimum distance of 8 from end of dest buffer */
|
1854
|
-
if (oend-op < 8) return (
|
1773
|
+
if (oend-op < 8) return ERROR(dstSize_tooSmall);
|
1855
1774
|
|
1856
1775
|
/* copy Match */
|
1857
1776
|
{
|
@@ -1861,8 +1780,8 @@ static size_t ZSTD_execSequence(BYTE* op,
|
|
1861
1780
|
U64 saved[2];
|
1862
1781
|
|
1863
1782
|
/* check */
|
1864
|
-
if (match < base) return (
|
1865
|
-
if (sequence.offset > (size_t)base) return (
|
1783
|
+
if (match < base) return ERROR(corruption_detected);
|
1784
|
+
if (sequence.offset > (size_t)base) return ERROR(corruption_detected);
|
1866
1785
|
|
1867
1786
|
/* save beginning of literal sequence, in case of write overlap */
|
1868
1787
|
if (overlapRisk)
|
@@ -1940,10 +1859,10 @@ static size_t ZSTD_decompressSequences(
|
|
1940
1859
|
BYTE* const base = (BYTE*) (dctx->base);
|
1941
1860
|
|
1942
1861
|
/* Build Decoding Tables */
|
1943
|
-
errorCode =
|
1862
|
+
errorCode = ZSTDv01_decodeSeqHeaders(&nbSeq, &dumps, &dumpsLength,
|
1944
1863
|
DTableLL, DTableML, DTableOffb,
|
1945
1864
|
ip, iend-ip);
|
1946
|
-
if (
|
1865
|
+
if (ZSTDv01_isError(errorCode)) return errorCode;
|
1947
1866
|
ip += errorCode;
|
1948
1867
|
|
1949
1868
|
/* Regen sequences */
|
@@ -1956,7 +1875,7 @@ static size_t ZSTD_decompressSequences(
|
|
1956
1875
|
seqState.dumpsEnd = dumps + dumpsLength;
|
1957
1876
|
seqState.prevOffset = 1;
|
1958
1877
|
errorCode = FSE_initDStream(&(seqState.DStream), ip, iend-ip);
|
1959
|
-
if (FSE_isError(errorCode)) return (
|
1878
|
+
if (FSE_isError(errorCode)) return ERROR(corruption_detected);
|
1960
1879
|
FSE_initDState(&(seqState.stateLL), &(seqState.DStream), DTableLL);
|
1961
1880
|
FSE_initDState(&(seqState.stateOffb), &(seqState.DStream), DTableOffb);
|
1962
1881
|
FSE_initDState(&(seqState.stateML), &(seqState.DStream), DTableML);
|
@@ -1967,18 +1886,18 @@ static size_t ZSTD_decompressSequences(
|
|
1967
1886
|
nbSeq--;
|
1968
1887
|
ZSTD_decodeSequence(&sequence, &seqState);
|
1969
1888
|
oneSeqSize = ZSTD_execSequence(op, sequence, &litPtr, litEnd, base, oend);
|
1970
|
-
if (
|
1889
|
+
if (ZSTDv01_isError(oneSeqSize)) return oneSeqSize;
|
1971
1890
|
op += oneSeqSize;
|
1972
1891
|
}
|
1973
1892
|
|
1974
1893
|
/* check if reached exact end */
|
1975
|
-
if ( !FSE_endOfDStream(&(seqState.DStream)) ) return (
|
1976
|
-
if (nbSeq<0) return (
|
1894
|
+
if ( !FSE_endOfDStream(&(seqState.DStream)) ) return ERROR(corruption_detected); /* requested too much : data is corrupted */
|
1895
|
+
if (nbSeq<0) return ERROR(corruption_detected); /* requested too many sequences : data is corrupted */
|
1977
1896
|
|
1978
1897
|
/* last literal segment */
|
1979
1898
|
{
|
1980
1899
|
size_t lastLLSize = litEnd - litPtr;
|
1981
|
-
if (op+lastLLSize > oend) return (
|
1900
|
+
if (op+lastLLSize > oend) return ERROR(dstSize_tooSmall);
|
1982
1901
|
if (op != litPtr) memmove(op, litPtr, lastLLSize);
|
1983
1902
|
op += lastLLSize;
|
1984
1903
|
}
|
@@ -2000,8 +1919,8 @@ static size_t ZSTD_decompressBlock(
|
|
2000
1919
|
size_t errorCode;
|
2001
1920
|
|
2002
1921
|
/* Decode literals sub-block */
|
2003
|
-
errorCode =
|
2004
|
-
if (
|
1922
|
+
errorCode = ZSTDv01_decodeLiteralsBlock(ctx, dst, maxDstSize, &litPtr, &litSize, src, srcSize);
|
1923
|
+
if (ZSTDv01_isError(errorCode)) return errorCode;
|
2005
1924
|
ip += errorCode;
|
2006
1925
|
srcSize -= errorCode;
|
2007
1926
|
|
@@ -2022,20 +1941,20 @@ size_t ZSTDv01_decompressDCtx(void* ctx, void* dst, size_t maxDstSize, const voi
|
|
2022
1941
|
blockProperties_t blockProperties;
|
2023
1942
|
|
2024
1943
|
/* Frame Header */
|
2025
|
-
if (srcSize < ZSTD_frameHeaderSize+ZSTD_blockHeaderSize) return (
|
1944
|
+
if (srcSize < ZSTD_frameHeaderSize+ZSTD_blockHeaderSize) return ERROR(srcSize_wrong);
|
2026
1945
|
magicNumber = ZSTD_readBE32(src);
|
2027
|
-
if (magicNumber != ZSTD_magicNumber) return (
|
1946
|
+
if (magicNumber != ZSTD_magicNumber) return ERROR(prefix_unknown);
|
2028
1947
|
ip += ZSTD_frameHeaderSize; remainingSize -= ZSTD_frameHeaderSize;
|
2029
1948
|
|
2030
1949
|
/* Loop on each block */
|
2031
1950
|
while (1)
|
2032
1951
|
{
|
2033
|
-
size_t blockSize =
|
2034
|
-
if (
|
1952
|
+
size_t blockSize = ZSTDv01_getcBlockSize(ip, iend-ip, &blockProperties);
|
1953
|
+
if (ZSTDv01_isError(blockSize)) return blockSize;
|
2035
1954
|
|
2036
1955
|
ip += ZSTD_blockHeaderSize;
|
2037
1956
|
remainingSize -= ZSTD_blockHeaderSize;
|
2038
|
-
if (blockSize > remainingSize) return (
|
1957
|
+
if (blockSize > remainingSize) return ERROR(srcSize_wrong);
|
2039
1958
|
|
2040
1959
|
switch(blockProperties.blockType)
|
2041
1960
|
{
|
@@ -2046,18 +1965,18 @@ size_t ZSTDv01_decompressDCtx(void* ctx, void* dst, size_t maxDstSize, const voi
|
|
2046
1965
|
errorCode = ZSTD_copyUncompressedBlock(op, oend-op, ip, blockSize);
|
2047
1966
|
break;
|
2048
1967
|
case bt_rle :
|
2049
|
-
return (
|
1968
|
+
return ERROR(GENERIC); /* not yet supported */
|
2050
1969
|
break;
|
2051
1970
|
case bt_end :
|
2052
1971
|
/* end of frame */
|
2053
|
-
if (remainingSize) return (
|
1972
|
+
if (remainingSize) return ERROR(srcSize_wrong);
|
2054
1973
|
break;
|
2055
1974
|
default:
|
2056
|
-
return (
|
1975
|
+
return ERROR(GENERIC);
|
2057
1976
|
}
|
2058
1977
|
if (blockSize == 0) break; /* bt_end */
|
2059
1978
|
|
2060
|
-
if (
|
1979
|
+
if (ZSTDv01_isError(errorCode)) return errorCode;
|
2061
1980
|
op += errorCode;
|
2062
1981
|
ip += blockSize;
|
2063
1982
|
remainingSize -= blockSize;
|
@@ -2111,7 +2030,7 @@ size_t ZSTDv01_decompressContinue(ZSTDv01_Dctx* dctx, void* dst, size_t maxDstSi
|
|
2111
2030
|
dctx_t* ctx = (dctx_t*)dctx;
|
2112
2031
|
|
2113
2032
|
/* Sanity check */
|
2114
|
-
if (srcSize != ctx->expected) return (
|
2033
|
+
if (srcSize != ctx->expected) return ERROR(srcSize_wrong);
|
2115
2034
|
if (dst != ctx->previousDstEnd) /* not contiguous */
|
2116
2035
|
ctx->base = dst;
|
2117
2036
|
|
@@ -2120,7 +2039,7 @@ size_t ZSTDv01_decompressContinue(ZSTDv01_Dctx* dctx, void* dst, size_t maxDstSi
|
|
2120
2039
|
{
|
2121
2040
|
/* Check frame magic header */
|
2122
2041
|
U32 magicNumber = ZSTD_readBE32(src);
|
2123
|
-
if (magicNumber != ZSTD_magicNumber) return (
|
2042
|
+
if (magicNumber != ZSTD_magicNumber) return ERROR(prefix_unknown);
|
2124
2043
|
ctx->phase = 1;
|
2125
2044
|
ctx->expected = ZSTD_blockHeaderSize;
|
2126
2045
|
return 0;
|
@@ -2130,8 +2049,8 @@ size_t ZSTDv01_decompressContinue(ZSTDv01_Dctx* dctx, void* dst, size_t maxDstSi
|
|
2130
2049
|
if (ctx->phase == 1)
|
2131
2050
|
{
|
2132
2051
|
blockProperties_t bp;
|
2133
|
-
size_t blockSize =
|
2134
|
-
if (
|
2052
|
+
size_t blockSize = ZSTDv01_getcBlockSize(src, ZSTD_blockHeaderSize, &bp);
|
2053
|
+
if (ZSTDv01_isError(blockSize)) return blockSize;
|
2135
2054
|
if (bp.blockType == bt_end)
|
2136
2055
|
{
|
2137
2056
|
ctx->expected = 0;
|
@@ -2159,13 +2078,13 @@ size_t ZSTDv01_decompressContinue(ZSTDv01_Dctx* dctx, void* dst, size_t maxDstSi
|
|
2159
2078
|
rSize = ZSTD_copyUncompressedBlock(dst, maxDstSize, src, srcSize);
|
2160
2079
|
break;
|
2161
2080
|
case bt_rle :
|
2162
|
-
return (
|
2081
|
+
return ERROR(GENERIC); /* not yet handled */
|
2163
2082
|
break;
|
2164
2083
|
case bt_end : /* should never happen (filtered at phase 1) */
|
2165
2084
|
rSize = 0;
|
2166
2085
|
break;
|
2167
2086
|
default:
|
2168
|
-
return (
|
2087
|
+
return ERROR(GENERIC);
|
2169
2088
|
}
|
2170
2089
|
ctx->phase = 1;
|
2171
2090
|
ctx->expected = ZSTD_blockHeaderSize;
|
@@ -2174,5 +2093,3 @@ size_t ZSTDv01_decompressContinue(ZSTDv01_Dctx* dctx, void* dst, size_t maxDstSi
|
|
2174
2093
|
}
|
2175
2094
|
|
2176
2095
|
}
|
2177
|
-
|
2178
|
-
|
@@ -1,36 +1,14 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
1
|
+
/**
|
2
|
+
* Copyright (c) 2016-present, Yann Collet, Facebook, Inc.
|
3
|
+
* All rights reserved.
|
4
|
+
*
|
5
|
+
* This source code is licensed under the BSD-style license found in the
|
6
|
+
* LICENSE file in the root directory of this source tree. An additional grant
|
7
|
+
* of patent rights can be found in the PATENTS file in the same directory.
|
8
|
+
*/
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
met:
|
11
|
-
* Redistributions of source code must retain the above copyright
|
12
|
-
notice, this list of conditions and the following disclaimer.
|
13
|
-
* Redistributions in binary form must reproduce the above
|
14
|
-
copyright notice, this list of conditions and the following disclaimer
|
15
|
-
in the documentation and/or other materials provided with the
|
16
|
-
distribution.
|
17
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
18
|
-
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
19
|
-
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
20
|
-
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
21
|
-
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
22
|
-
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
23
|
-
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
24
|
-
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
25
|
-
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
26
|
-
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
27
|
-
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
28
|
-
|
29
|
-
You can contact the author at :
|
30
|
-
- zstd source repository : https://github.com/Cyan4973/zstd
|
31
|
-
- ztsd public forum : https://groups.google.com/forum/#!forum/lz4c
|
32
|
-
*/
|
33
|
-
#pragma once
|
10
|
+
#ifndef ZSTD_V01_H_28739879432
|
11
|
+
#define ZSTD_V01_H_28739879432
|
34
12
|
|
35
13
|
#if defined (__cplusplus)
|
36
14
|
extern "C" {
|
@@ -98,3 +76,5 @@ size_t ZSTDv01_decompressContinue(ZSTDv01_Dctx* dctx, void* dst, size_t maxDstSi
|
|
98
76
|
#if defined (__cplusplus)
|
99
77
|
}
|
100
78
|
#endif
|
79
|
+
|
80
|
+
#endif /* ZSTD_V01_H_28739879432 */
|