Coverage Report

Created: 2026-06-01 06:57

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/zstd/lib/legacy/zstd_legacy.h
Line
Count
Source
1
/*
2
 * Copyright (c) Meta Platforms, Inc. and affiliates.
3
 * All rights reserved.
4
 *
5
 * This source code is licensed under both the BSD-style license (found in the
6
 * LICENSE file in the root directory of this source tree) and the GPLv2 (found
7
 * in the COPYING file in the root directory of this source tree).
8
 * You may select, at your option, one of the above-listed licenses.
9
 */
10
11
#ifndef ZSTD_LEGACY_H
12
#define ZSTD_LEGACY_H
13
14
#if defined (__cplusplus)
15
extern "C" {
16
#endif
17
18
/* *************************************
19
*  Includes
20
***************************************/
21
#include "../common/mem.h"            /* MEM_STATIC */
22
#include "../common/error_private.h"  /* ERROR */
23
#include "../common/zstd_internal.h"  /* ZSTD_inBuffer, ZSTD_outBuffer, ZSTD_frameSizeInfo */
24
25
#if !defined (ZSTD_LEGACY_SUPPORT) || (ZSTD_LEGACY_SUPPORT == 0)
26
#  undef ZSTD_LEGACY_SUPPORT
27
#  define ZSTD_LEGACY_SUPPORT 8
28
#endif
29
30
#if (ZSTD_LEGACY_SUPPORT <= 1)
31
#  include "zstd_v01.h"
32
#endif
33
#if (ZSTD_LEGACY_SUPPORT <= 2)
34
#  include "zstd_v02.h"
35
#endif
36
#if (ZSTD_LEGACY_SUPPORT <= 3)
37
#  include "zstd_v03.h"
38
#endif
39
#if (ZSTD_LEGACY_SUPPORT <= 4)
40
#  include "zstd_v04.h"
41
#endif
42
#if (ZSTD_LEGACY_SUPPORT <= 5)
43
#  include "zstd_v05.h"
44
#endif
45
#if (ZSTD_LEGACY_SUPPORT <= 6)
46
#  include "zstd_v06.h"
47
#endif
48
#if (ZSTD_LEGACY_SUPPORT <= 7)
49
#  include "zstd_v07.h"
50
#endif
51
52
/** ZSTD_isLegacy() :
53
    @return : > 0 if supported by legacy decoder. 0 otherwise.
54
              return value is the version.
55
*/
56
MEM_STATIC unsigned ZSTD_isLegacy(const void* src, size_t srcSize)
57
1.37M
{
58
1.37M
    U32 magicNumberLE;
59
1.37M
    if (srcSize<4) return 0;
60
1.37M
    magicNumberLE = MEM_readLE32(src);
61
1.37M
    switch(magicNumberLE)
62
1.37M
    {
63
0
#if (ZSTD_LEGACY_SUPPORT <= 1)
64
46.9k
        case ZSTDv01_magicNumberLE:return 1;
65
0
#endif
66
0
#if (ZSTD_LEGACY_SUPPORT <= 2)
67
28.6k
        case ZSTDv02_magicNumber : return 2;
68
0
#endif
69
0
#if (ZSTD_LEGACY_SUPPORT <= 3)
70
27.6k
        case ZSTDv03_magicNumber : return 3;
71
0
#endif
72
0
#if (ZSTD_LEGACY_SUPPORT <= 4)
73
27.5k
        case ZSTDv04_magicNumber : return 4;
74
0
#endif
75
0
#if (ZSTD_LEGACY_SUPPORT <= 5)
76
33.7k
        case ZSTDv05_MAGICNUMBER : return 5;
77
0
#endif
78
0
#if (ZSTD_LEGACY_SUPPORT <= 6)
79
50.1k
        case ZSTDv06_MAGICNUMBER : return 6;
80
0
#endif
81
0
#if (ZSTD_LEGACY_SUPPORT <= 7)
82
100k
        case ZSTDv07_MAGICNUMBER : return 7;
83
0
#endif
84
1.05M
        default : return 0;
85
1.37M
    }
86
1.37M
}
Unexecuted instantiation: zstd_ddict.c:ZSTD_isLegacy
zstd_decompress.c:ZSTD_isLegacy
Line
Count
Source
57
1.37M
{
58
1.37M
    U32 magicNumberLE;
59
1.37M
    if (srcSize<4) return 0;
60
1.37M
    magicNumberLE = MEM_readLE32(src);
61
1.37M
    switch(magicNumberLE)
62
1.37M
    {
63
0
#if (ZSTD_LEGACY_SUPPORT <= 1)
64
46.9k
        case ZSTDv01_magicNumberLE:return 1;
65
0
#endif
66
0
#if (ZSTD_LEGACY_SUPPORT <= 2)
67
28.6k
        case ZSTDv02_magicNumber : return 2;
68
0
#endif
69
0
#if (ZSTD_LEGACY_SUPPORT <= 3)
70
27.6k
        case ZSTDv03_magicNumber : return 3;
71
0
#endif
72
0
#if (ZSTD_LEGACY_SUPPORT <= 4)
73
27.5k
        case ZSTDv04_magicNumber : return 4;
74
0
#endif
75
0
#if (ZSTD_LEGACY_SUPPORT <= 5)
76
33.7k
        case ZSTDv05_MAGICNUMBER : return 5;
77
0
#endif
78
0
#if (ZSTD_LEGACY_SUPPORT <= 6)
79
50.1k
        case ZSTDv06_MAGICNUMBER : return 6;
80
0
#endif
81
0
#if (ZSTD_LEGACY_SUPPORT <= 7)
82
100k
        case ZSTDv07_MAGICNUMBER : return 7;
83
0
#endif
84
1.05M
        default : return 0;
85
1.37M
    }
86
1.37M
}
87
88
89
MEM_STATIC unsigned long long ZSTD_getDecompressedSize_legacy(const void* src, size_t srcSize)
90
43.5k
{
91
43.5k
    U32 const version = ZSTD_isLegacy(src, srcSize);
92
43.5k
    if (version < 5) return 0;  /* no decompressed size in frame header, or not a legacy format */
93
27.7k
#if (ZSTD_LEGACY_SUPPORT <= 5)
94
27.7k
    if (version==5) {
95
4.06k
        ZSTDv05_parameters fParams;
96
4.06k
        size_t const frResult = ZSTDv05_getFrameParams(&fParams, src, srcSize);
97
4.06k
        if (frResult != 0) return 0;
98
3.72k
        return fParams.srcSize;
99
4.06k
    }
100
23.6k
#endif
101
23.6k
#if (ZSTD_LEGACY_SUPPORT <= 6)
102
23.6k
    if (version==6) {
103
7.12k
        ZSTDv06_frameParams fParams;
104
7.12k
        size_t const frResult = ZSTDv06_getFrameParams(&fParams, src, srcSize);
105
7.12k
        if (frResult != 0) return 0;
106
6.93k
        return fParams.frameContentSize;
107
7.12k
    }
108
16.5k
#endif
109
16.5k
#if (ZSTD_LEGACY_SUPPORT <= 7)
110
16.5k
    if (version==7) {
111
16.5k
        ZSTDv07_frameParams fParams;
112
16.5k
        size_t const frResult = ZSTDv07_getFrameParams(&fParams, src, srcSize);
113
16.5k
        if (frResult != 0) return 0;
114
16.2k
        return fParams.frameContentSize;
115
16.5k
    }
116
0
#endif
117
0
    return 0;   /* should not be possible */
118
16.5k
}
Unexecuted instantiation: zstd_ddict.c:ZSTD_getDecompressedSize_legacy
zstd_decompress.c:ZSTD_getDecompressedSize_legacy
Line
Count
Source
90
43.5k
{
91
43.5k
    U32 const version = ZSTD_isLegacy(src, srcSize);
92
43.5k
    if (version < 5) return 0;  /* no decompressed size in frame header, or not a legacy format */
93
27.7k
#if (ZSTD_LEGACY_SUPPORT <= 5)
94
27.7k
    if (version==5) {
95
4.06k
        ZSTDv05_parameters fParams;
96
4.06k
        size_t const frResult = ZSTDv05_getFrameParams(&fParams, src, srcSize);
97
4.06k
        if (frResult != 0) return 0;
98
3.72k
        return fParams.srcSize;
99
4.06k
    }
100
23.6k
#endif
101
23.6k
#if (ZSTD_LEGACY_SUPPORT <= 6)
102
23.6k
    if (version==6) {
103
7.12k
        ZSTDv06_frameParams fParams;
104
7.12k
        size_t const frResult = ZSTDv06_getFrameParams(&fParams, src, srcSize);
105
7.12k
        if (frResult != 0) return 0;
106
6.93k
        return fParams.frameContentSize;
107
7.12k
    }
108
16.5k
#endif
109
16.5k
#if (ZSTD_LEGACY_SUPPORT <= 7)
110
16.5k
    if (version==7) {
111
16.5k
        ZSTDv07_frameParams fParams;
112
16.5k
        size_t const frResult = ZSTDv07_getFrameParams(&fParams, src, srcSize);
113
16.5k
        if (frResult != 0) return 0;
114
16.2k
        return fParams.frameContentSize;
115
16.5k
    }
116
0
#endif
117
0
    return 0;   /* should not be possible */
118
16.5k
}
119
120
121
MEM_STATIC size_t ZSTD_decompressLegacy(
122
                     void* dst, size_t dstCapacity,
123
               const void* src, size_t compressedSize,
124
               const void* dict,size_t dictSize)
125
56.6k
{
126
56.6k
    U32 const version = ZSTD_isLegacy(src, compressedSize);
127
56.6k
    char x;
128
    /* Avoid passing NULL to legacy decoding. */
129
56.6k
    if (dst == NULL) {
130
31.6k
        assert(dstCapacity == 0);
131
31.6k
        dst = &x;
132
31.6k
    }
133
56.6k
    if (src == NULL) {
134
0
        assert(compressedSize == 0);
135
0
        src = &x;
136
0
    }
137
56.6k
    if (dict == NULL) {
138
26.3k
        assert(dictSize == 0);
139
26.3k
        dict = &x;
140
26.3k
    }
141
56.6k
    (void)dst; (void)dstCapacity; (void)dict; (void)dictSize;  /* unused when ZSTD_LEGACY_SUPPORT >= 8 */
142
56.6k
    switch(version)
143
56.6k
    {
144
0
#if (ZSTD_LEGACY_SUPPORT <= 1)
145
9.75k
        case 1 :
146
9.75k
            return ZSTDv01_decompress(dst, dstCapacity, src, compressedSize);
147
0
#endif
148
0
#if (ZSTD_LEGACY_SUPPORT <= 2)
149
6.05k
        case 2 :
150
6.05k
            return ZSTDv02_decompress(dst, dstCapacity, src, compressedSize);
151
0
#endif
152
0
#if (ZSTD_LEGACY_SUPPORT <= 3)
153
5.84k
        case 3 :
154
5.84k
            return ZSTDv03_decompress(dst, dstCapacity, src, compressedSize);
155
0
#endif
156
0
#if (ZSTD_LEGACY_SUPPORT <= 4)
157
5.30k
        case 4 :
158
5.30k
            return ZSTDv04_decompress(dst, dstCapacity, src, compressedSize);
159
0
#endif
160
0
#if (ZSTD_LEGACY_SUPPORT <= 5)
161
6.55k
        case 5 :
162
6.55k
            {   size_t result;
163
6.55k
                ZSTDv05_DCtx* const zd = ZSTDv05_createDCtx();
164
6.55k
                if (zd==NULL) return ERROR(memory_allocation);
165
6.55k
                result = ZSTDv05_decompress_usingDict(zd, dst, dstCapacity, src, compressedSize, dict, dictSize);
166
6.55k
                ZSTDv05_freeDCtx(zd);
167
6.55k
                return result;
168
6.55k
            }
169
0
#endif
170
0
#if (ZSTD_LEGACY_SUPPORT <= 6)
171
7.60k
        case 6 :
172
7.60k
            {   size_t result;
173
7.60k
                ZSTDv06_DCtx* const zd = ZSTDv06_createDCtx();
174
7.60k
                if (zd==NULL) return ERROR(memory_allocation);
175
7.60k
                result = ZSTDv06_decompress_usingDict(zd, dst, dstCapacity, src, compressedSize, dict, dictSize);
176
7.60k
                ZSTDv06_freeDCtx(zd);
177
7.60k
                return result;
178
7.60k
            }
179
0
#endif
180
0
#if (ZSTD_LEGACY_SUPPORT <= 7)
181
15.5k
        case 7 :
182
15.5k
            {   size_t result;
183
15.5k
                ZSTDv07_DCtx* const zd = ZSTDv07_createDCtx();
184
15.5k
                if (zd==NULL) return ERROR(memory_allocation);
185
15.5k
                result = ZSTDv07_decompress_usingDict(zd, dst, dstCapacity, src, compressedSize, dict, dictSize);
186
15.5k
                ZSTDv07_freeDCtx(zd);
187
15.5k
                return result;
188
15.5k
            }
189
0
#endif
190
0
        default :
191
0
            return ERROR(prefix_unknown);
192
56.6k
    }
193
56.6k
}
Unexecuted instantiation: zstd_ddict.c:ZSTD_decompressLegacy
zstd_decompress.c:ZSTD_decompressLegacy
Line
Count
Source
125
56.6k
{
126
56.6k
    U32 const version = ZSTD_isLegacy(src, compressedSize);
127
56.6k
    char x;
128
    /* Avoid passing NULL to legacy decoding. */
129
56.6k
    if (dst == NULL) {
130
31.6k
        assert(dstCapacity == 0);
131
31.6k
        dst = &x;
132
31.6k
    }
133
56.6k
    if (src == NULL) {
134
0
        assert(compressedSize == 0);
135
0
        src = &x;
136
0
    }
137
56.6k
    if (dict == NULL) {
138
26.3k
        assert(dictSize == 0);
139
26.3k
        dict = &x;
140
26.3k
    }
141
56.6k
    (void)dst; (void)dstCapacity; (void)dict; (void)dictSize;  /* unused when ZSTD_LEGACY_SUPPORT >= 8 */
142
56.6k
    switch(version)
143
56.6k
    {
144
0
#if (ZSTD_LEGACY_SUPPORT <= 1)
145
9.75k
        case 1 :
146
9.75k
            return ZSTDv01_decompress(dst, dstCapacity, src, compressedSize);
147
0
#endif
148
0
#if (ZSTD_LEGACY_SUPPORT <= 2)
149
6.05k
        case 2 :
150
6.05k
            return ZSTDv02_decompress(dst, dstCapacity, src, compressedSize);
151
0
#endif
152
0
#if (ZSTD_LEGACY_SUPPORT <= 3)
153
5.84k
        case 3 :
154
5.84k
            return ZSTDv03_decompress(dst, dstCapacity, src, compressedSize);
155
0
#endif
156
0
#if (ZSTD_LEGACY_SUPPORT <= 4)
157
5.30k
        case 4 :
158
5.30k
            return ZSTDv04_decompress(dst, dstCapacity, src, compressedSize);
159
0
#endif
160
0
#if (ZSTD_LEGACY_SUPPORT <= 5)
161
6.55k
        case 5 :
162
6.55k
            {   size_t result;
163
6.55k
                ZSTDv05_DCtx* const zd = ZSTDv05_createDCtx();
164
6.55k
                if (zd==NULL) return ERROR(memory_allocation);
165
6.55k
                result = ZSTDv05_decompress_usingDict(zd, dst, dstCapacity, src, compressedSize, dict, dictSize);
166
6.55k
                ZSTDv05_freeDCtx(zd);
167
6.55k
                return result;
168
6.55k
            }
169
0
#endif
170
0
#if (ZSTD_LEGACY_SUPPORT <= 6)
171
7.60k
        case 6 :
172
7.60k
            {   size_t result;
173
7.60k
                ZSTDv06_DCtx* const zd = ZSTDv06_createDCtx();
174
7.60k
                if (zd==NULL) return ERROR(memory_allocation);
175
7.60k
                result = ZSTDv06_decompress_usingDict(zd, dst, dstCapacity, src, compressedSize, dict, dictSize);
176
7.60k
                ZSTDv06_freeDCtx(zd);
177
7.60k
                return result;
178
7.60k
            }
179
0
#endif
180
0
#if (ZSTD_LEGACY_SUPPORT <= 7)
181
15.5k
        case 7 :
182
15.5k
            {   size_t result;
183
15.5k
                ZSTDv07_DCtx* const zd = ZSTDv07_createDCtx();
184
15.5k
                if (zd==NULL) return ERROR(memory_allocation);
185
15.5k
                result = ZSTDv07_decompress_usingDict(zd, dst, dstCapacity, src, compressedSize, dict, dictSize);
186
15.5k
                ZSTDv07_freeDCtx(zd);
187
15.5k
                return result;
188
15.5k
            }
189
0
#endif
190
0
        default :
191
0
            return ERROR(prefix_unknown);
192
56.6k
    }
193
56.6k
}
194
195
MEM_STATIC ZSTD_frameSizeInfo ZSTD_findFrameSizeInfoLegacy(const void *src, size_t srcSize)
196
76.9k
{
197
76.9k
    ZSTD_frameSizeInfo frameSizeInfo;
198
76.9k
    U32 const version = ZSTD_isLegacy(src, srcSize);
199
76.9k
    switch(version)
200
76.9k
    {
201
0
#if (ZSTD_LEGACY_SUPPORT <= 1)
202
11.7k
        case 1 :
203
11.7k
            ZSTDv01_findFrameSizeInfoLegacy(src, srcSize,
204
11.7k
                &frameSizeInfo.compressedSize,
205
11.7k
                &frameSizeInfo.decompressedBound);
206
11.7k
            break;
207
0
#endif
208
0
#if (ZSTD_LEGACY_SUPPORT <= 2)
209
8.41k
        case 2 :
210
8.41k
            ZSTDv02_findFrameSizeInfoLegacy(src, srcSize,
211
8.41k
                &frameSizeInfo.compressedSize,
212
8.41k
                &frameSizeInfo.decompressedBound);
213
8.41k
            break;
214
0
#endif
215
0
#if (ZSTD_LEGACY_SUPPORT <= 3)
216
7.82k
        case 3 :
217
7.82k
            ZSTDv03_findFrameSizeInfoLegacy(src, srcSize,
218
7.82k
                &frameSizeInfo.compressedSize,
219
7.82k
                &frameSizeInfo.decompressedBound);
220
7.82k
            break;
221
0
#endif
222
0
#if (ZSTD_LEGACY_SUPPORT <= 4)
223
6.39k
        case 4 :
224
6.39k
            ZSTDv04_findFrameSizeInfoLegacy(src, srcSize,
225
6.39k
                &frameSizeInfo.compressedSize,
226
6.39k
                &frameSizeInfo.decompressedBound);
227
6.39k
            break;
228
0
#endif
229
0
#if (ZSTD_LEGACY_SUPPORT <= 5)
230
7.78k
        case 5 :
231
7.78k
            ZSTDv05_findFrameSizeInfoLegacy(src, srcSize,
232
7.78k
                &frameSizeInfo.compressedSize,
233
7.78k
                &frameSizeInfo.decompressedBound);
234
7.78k
            break;
235
0
#endif
236
0
#if (ZSTD_LEGACY_SUPPORT <= 6)
237
11.6k
        case 6 :
238
11.6k
            ZSTDv06_findFrameSizeInfoLegacy(src, srcSize,
239
11.6k
                &frameSizeInfo.compressedSize,
240
11.6k
                &frameSizeInfo.decompressedBound);
241
11.6k
            break;
242
0
#endif
243
0
#if (ZSTD_LEGACY_SUPPORT <= 7)
244
23.1k
        case 7 :
245
23.1k
            ZSTDv07_findFrameSizeInfoLegacy(src, srcSize,
246
23.1k
                &frameSizeInfo.compressedSize,
247
23.1k
                &frameSizeInfo.decompressedBound);
248
23.1k
            break;
249
0
#endif
250
0
        default :
251
0
            frameSizeInfo.compressedSize = ERROR(prefix_unknown);
252
0
            frameSizeInfo.decompressedBound = ZSTD_CONTENTSIZE_ERROR;
253
0
            break;
254
76.9k
    }
255
76.9k
    if (!ZSTD_isError(frameSizeInfo.compressedSize) && frameSizeInfo.compressedSize > srcSize) {
256
0
        frameSizeInfo.compressedSize = ERROR(srcSize_wrong);
257
0
        frameSizeInfo.decompressedBound = ZSTD_CONTENTSIZE_ERROR;
258
0
    }
259
    /* In all cases, decompressedBound == nbBlocks * ZSTD_BLOCKSIZE_MAX.
260
     * So we can compute nbBlocks without having to change every function.
261
     */
262
76.9k
    if (frameSizeInfo.decompressedBound != ZSTD_CONTENTSIZE_ERROR) {
263
72.9k
        assert((frameSizeInfo.decompressedBound & (ZSTD_BLOCKSIZE_MAX - 1)) == 0);
264
72.9k
        frameSizeInfo.nbBlocks = (size_t)(frameSizeInfo.decompressedBound / ZSTD_BLOCKSIZE_MAX);
265
72.9k
    }
266
76.9k
    return frameSizeInfo;
267
76.9k
}
Unexecuted instantiation: zstd_ddict.c:ZSTD_findFrameSizeInfoLegacy
zstd_decompress.c:ZSTD_findFrameSizeInfoLegacy
Line
Count
Source
196
76.9k
{
197
76.9k
    ZSTD_frameSizeInfo frameSizeInfo;
198
76.9k
    U32 const version = ZSTD_isLegacy(src, srcSize);
199
76.9k
    switch(version)
200
76.9k
    {
201
0
#if (ZSTD_LEGACY_SUPPORT <= 1)
202
11.7k
        case 1 :
203
11.7k
            ZSTDv01_findFrameSizeInfoLegacy(src, srcSize,
204
11.7k
                &frameSizeInfo.compressedSize,
205
11.7k
                &frameSizeInfo.decompressedBound);
206
11.7k
            break;
207
0
#endif
208
0
#if (ZSTD_LEGACY_SUPPORT <= 2)
209
8.41k
        case 2 :
210
8.41k
            ZSTDv02_findFrameSizeInfoLegacy(src, srcSize,
211
8.41k
                &frameSizeInfo.compressedSize,
212
8.41k
                &frameSizeInfo.decompressedBound);
213
8.41k
            break;
214
0
#endif
215
0
#if (ZSTD_LEGACY_SUPPORT <= 3)
216
7.82k
        case 3 :
217
7.82k
            ZSTDv03_findFrameSizeInfoLegacy(src, srcSize,
218
7.82k
                &frameSizeInfo.compressedSize,
219
7.82k
                &frameSizeInfo.decompressedBound);
220
7.82k
            break;
221
0
#endif
222
0
#if (ZSTD_LEGACY_SUPPORT <= 4)
223
6.39k
        case 4 :
224
6.39k
            ZSTDv04_findFrameSizeInfoLegacy(src, srcSize,
225
6.39k
                &frameSizeInfo.compressedSize,
226
6.39k
                &frameSizeInfo.decompressedBound);
227
6.39k
            break;
228
0
#endif
229
0
#if (ZSTD_LEGACY_SUPPORT <= 5)
230
7.78k
        case 5 :
231
7.78k
            ZSTDv05_findFrameSizeInfoLegacy(src, srcSize,
232
7.78k
                &frameSizeInfo.compressedSize,
233
7.78k
                &frameSizeInfo.decompressedBound);
234
7.78k
            break;
235
0
#endif
236
0
#if (ZSTD_LEGACY_SUPPORT <= 6)
237
11.6k
        case 6 :
238
11.6k
            ZSTDv06_findFrameSizeInfoLegacy(src, srcSize,
239
11.6k
                &frameSizeInfo.compressedSize,
240
11.6k
                &frameSizeInfo.decompressedBound);
241
11.6k
            break;
242
0
#endif
243
0
#if (ZSTD_LEGACY_SUPPORT <= 7)
244
23.1k
        case 7 :
245
23.1k
            ZSTDv07_findFrameSizeInfoLegacy(src, srcSize,
246
23.1k
                &frameSizeInfo.compressedSize,
247
23.1k
                &frameSizeInfo.decompressedBound);
248
23.1k
            break;
249
0
#endif
250
0
        default :
251
0
            frameSizeInfo.compressedSize = ERROR(prefix_unknown);
252
0
            frameSizeInfo.decompressedBound = ZSTD_CONTENTSIZE_ERROR;
253
0
            break;
254
76.9k
    }
255
76.9k
    if (!ZSTD_isError(frameSizeInfo.compressedSize) && frameSizeInfo.compressedSize > srcSize) {
256
0
        frameSizeInfo.compressedSize = ERROR(srcSize_wrong);
257
0
        frameSizeInfo.decompressedBound = ZSTD_CONTENTSIZE_ERROR;
258
0
    }
259
    /* In all cases, decompressedBound == nbBlocks * ZSTD_BLOCKSIZE_MAX.
260
     * So we can compute nbBlocks without having to change every function.
261
     */
262
76.9k
    if (frameSizeInfo.decompressedBound != ZSTD_CONTENTSIZE_ERROR) {
263
72.9k
        assert((frameSizeInfo.decompressedBound & (ZSTD_BLOCKSIZE_MAX - 1)) == 0);
264
72.9k
        frameSizeInfo.nbBlocks = (size_t)(frameSizeInfo.decompressedBound / ZSTD_BLOCKSIZE_MAX);
265
72.9k
    }
266
76.9k
    return frameSizeInfo;
267
76.9k
}
268
269
MEM_STATIC size_t ZSTD_findFrameCompressedSizeLegacy(const void *src, size_t srcSize)
270
57.9k
{
271
57.9k
    ZSTD_frameSizeInfo frameSizeInfo = ZSTD_findFrameSizeInfoLegacy(src, srcSize);
272
57.9k
    return frameSizeInfo.compressedSize;
273
57.9k
}
Unexecuted instantiation: zstd_ddict.c:ZSTD_findFrameCompressedSizeLegacy
zstd_decompress.c:ZSTD_findFrameCompressedSizeLegacy
Line
Count
Source
270
57.9k
{
271
57.9k
    ZSTD_frameSizeInfo frameSizeInfo = ZSTD_findFrameSizeInfoLegacy(src, srcSize);
272
57.9k
    return frameSizeInfo.compressedSize;
273
57.9k
}
274
275
MEM_STATIC size_t ZSTD_freeLegacyStreamContext(void* legacyContext, U32 version)
276
18.6k
{
277
18.6k
    switch(version)
278
18.6k
    {
279
7.84k
        default :
280
7.84k
        case 1 :
281
7.84k
        case 2 :
282
7.84k
        case 3 :
283
7.84k
            (void)legacyContext;
284
7.84k
            return ERROR(version_unsupported);
285
0
#if (ZSTD_LEGACY_SUPPORT <= 4)
286
2.12k
        case 4 : return ZBUFFv04_freeDCtx((ZBUFFv04_DCtx*)legacyContext);
287
0
#endif
288
0
#if (ZSTD_LEGACY_SUPPORT <= 5)
289
2.70k
        case 5 : return ZBUFFv05_freeDCtx((ZBUFFv05_DCtx*)legacyContext);
290
0
#endif
291
0
#if (ZSTD_LEGACY_SUPPORT <= 6)
292
2.88k
        case 6 : return ZBUFFv06_freeDCtx((ZBUFFv06_DCtx*)legacyContext);
293
0
#endif
294
0
#if (ZSTD_LEGACY_SUPPORT <= 7)
295
3.10k
        case 7 : return ZBUFFv07_freeDCtx((ZBUFFv07_DCtx*)legacyContext);
296
18.6k
#endif
297
18.6k
    }
298
18.6k
}
Unexecuted instantiation: zstd_ddict.c:ZSTD_freeLegacyStreamContext
zstd_decompress.c:ZSTD_freeLegacyStreamContext
Line
Count
Source
276
18.6k
{
277
18.6k
    switch(version)
278
18.6k
    {
279
7.84k
        default :
280
7.84k
        case 1 :
281
7.84k
        case 2 :
282
7.84k
        case 3 :
283
7.84k
            (void)legacyContext;
284
7.84k
            return ERROR(version_unsupported);
285
0
#if (ZSTD_LEGACY_SUPPORT <= 4)
286
2.12k
        case 4 : return ZBUFFv04_freeDCtx((ZBUFFv04_DCtx*)legacyContext);
287
0
#endif
288
0
#if (ZSTD_LEGACY_SUPPORT <= 5)
289
2.70k
        case 5 : return ZBUFFv05_freeDCtx((ZBUFFv05_DCtx*)legacyContext);
290
0
#endif
291
0
#if (ZSTD_LEGACY_SUPPORT <= 6)
292
2.88k
        case 6 : return ZBUFFv06_freeDCtx((ZBUFFv06_DCtx*)legacyContext);
293
0
#endif
294
0
#if (ZSTD_LEGACY_SUPPORT <= 7)
295
3.10k
        case 7 : return ZBUFFv07_freeDCtx((ZBUFFv07_DCtx*)legacyContext);
296
18.6k
#endif
297
18.6k
    }
298
18.6k
}
299
300
301
MEM_STATIC size_t ZSTD_initLegacyStream(void** legacyContext, U32 prevVersion, U32 newVersion,
302
                                        const void* dict, size_t dictSize)
303
15.8k
{
304
15.8k
    char x;
305
    /* Avoid passing NULL to legacy decoding. */
306
15.8k
    if (dict == NULL) {
307
15.8k
        assert(dictSize == 0);
308
15.8k
        dict = &x;
309
15.8k
    }
310
15.8k
    DEBUGLOG(5, "ZSTD_initLegacyStream for v0.%u", newVersion);
311
15.8k
    if (prevVersion != newVersion) ZSTD_freeLegacyStreamContext(*legacyContext, prevVersion);
312
15.8k
    switch(newVersion)
313
15.8k
    {
314
0
        default :
315
1
        case 1 :
316
4
        case 2 :
317
7
        case 3 :
318
7
            (void)dict; (void)dictSize;
319
7
            return 0;
320
0
#if (ZSTD_LEGACY_SUPPORT <= 4)
321
2.84k
        case 4 :
322
2.84k
        {
323
2.84k
            ZBUFFv04_DCtx* dctx = (prevVersion != newVersion) ? ZBUFFv04_createDCtx() : (ZBUFFv04_DCtx*)*legacyContext;
324
2.84k
            if (dctx==NULL) return ERROR(memory_allocation);
325
2.84k
            ZBUFFv04_decompressInit(dctx);
326
2.84k
            ZBUFFv04_decompressWithDictionary(dctx, dict, dictSize);
327
2.84k
            *legacyContext = dctx;
328
2.84k
            return 0;
329
2.84k
        }
330
0
#endif
331
0
#if (ZSTD_LEGACY_SUPPORT <= 5)
332
3.34k
        case 5 :
333
3.34k
        {
334
3.34k
            ZBUFFv05_DCtx* dctx = (prevVersion != newVersion) ? ZBUFFv05_createDCtx() : (ZBUFFv05_DCtx*)*legacyContext;
335
3.34k
            if (dctx==NULL) return ERROR(memory_allocation);
336
3.34k
            ZBUFFv05_decompressInitDictionary(dctx, dict, dictSize);
337
3.34k
            *legacyContext = dctx;
338
3.34k
            return 0;
339
3.34k
        }
340
0
#endif
341
0
#if (ZSTD_LEGACY_SUPPORT <= 6)
342
4.75k
        case 6 :
343
4.75k
        {
344
4.75k
            ZBUFFv06_DCtx* dctx = (prevVersion != newVersion) ? ZBUFFv06_createDCtx() : (ZBUFFv06_DCtx*)*legacyContext;
345
4.75k
            if (dctx==NULL) return ERROR(memory_allocation);
346
4.75k
            ZBUFFv06_decompressInitDictionary(dctx, dict, dictSize);
347
4.75k
            *legacyContext = dctx;
348
4.75k
            return 0;
349
4.75k
        }
350
0
#endif
351
0
#if (ZSTD_LEGACY_SUPPORT <= 7)
352
4.87k
        case 7 :
353
4.87k
        {
354
4.87k
            ZBUFFv07_DCtx* dctx = (prevVersion != newVersion) ? ZBUFFv07_createDCtx() : (ZBUFFv07_DCtx*)*legacyContext;
355
4.87k
            if (dctx==NULL) return ERROR(memory_allocation);
356
4.87k
            ZBUFFv07_decompressInitDictionary(dctx, dict, dictSize);
357
4.87k
            *legacyContext = dctx;
358
4.87k
            return 0;
359
4.87k
        }
360
15.8k
#endif
361
15.8k
    }
362
15.8k
}
Unexecuted instantiation: zstd_ddict.c:ZSTD_initLegacyStream
zstd_decompress.c:ZSTD_initLegacyStream
Line
Count
Source
303
15.8k
{
304
15.8k
    char x;
305
    /* Avoid passing NULL to legacy decoding. */
306
15.8k
    if (dict == NULL) {
307
15.8k
        assert(dictSize == 0);
308
15.8k
        dict = &x;
309
15.8k
    }
310
15.8k
    DEBUGLOG(5, "ZSTD_initLegacyStream for v0.%u", newVersion);
311
15.8k
    if (prevVersion != newVersion) ZSTD_freeLegacyStreamContext(*legacyContext, prevVersion);
312
15.8k
    switch(newVersion)
313
15.8k
    {
314
0
        default :
315
1
        case 1 :
316
4
        case 2 :
317
7
        case 3 :
318
7
            (void)dict; (void)dictSize;
319
7
            return 0;
320
0
#if (ZSTD_LEGACY_SUPPORT <= 4)
321
2.84k
        case 4 :
322
2.84k
        {
323
2.84k
            ZBUFFv04_DCtx* dctx = (prevVersion != newVersion) ? ZBUFFv04_createDCtx() : (ZBUFFv04_DCtx*)*legacyContext;
324
2.84k
            if (dctx==NULL) return ERROR(memory_allocation);
325
2.84k
            ZBUFFv04_decompressInit(dctx);
326
2.84k
            ZBUFFv04_decompressWithDictionary(dctx, dict, dictSize);
327
2.84k
            *legacyContext = dctx;
328
2.84k
            return 0;
329
2.84k
        }
330
0
#endif
331
0
#if (ZSTD_LEGACY_SUPPORT <= 5)
332
3.34k
        case 5 :
333
3.34k
        {
334
3.34k
            ZBUFFv05_DCtx* dctx = (prevVersion != newVersion) ? ZBUFFv05_createDCtx() : (ZBUFFv05_DCtx*)*legacyContext;
335
3.34k
            if (dctx==NULL) return ERROR(memory_allocation);
336
3.34k
            ZBUFFv05_decompressInitDictionary(dctx, dict, dictSize);
337
3.34k
            *legacyContext = dctx;
338
3.34k
            return 0;
339
3.34k
        }
340
0
#endif
341
0
#if (ZSTD_LEGACY_SUPPORT <= 6)
342
4.75k
        case 6 :
343
4.75k
        {
344
4.75k
            ZBUFFv06_DCtx* dctx = (prevVersion != newVersion) ? ZBUFFv06_createDCtx() : (ZBUFFv06_DCtx*)*legacyContext;
345
4.75k
            if (dctx==NULL) return ERROR(memory_allocation);
346
4.75k
            ZBUFFv06_decompressInitDictionary(dctx, dict, dictSize);
347
4.75k
            *legacyContext = dctx;
348
4.75k
            return 0;
349
4.75k
        }
350
0
#endif
351
0
#if (ZSTD_LEGACY_SUPPORT <= 7)
352
4.87k
        case 7 :
353
4.87k
        {
354
4.87k
            ZBUFFv07_DCtx* dctx = (prevVersion != newVersion) ? ZBUFFv07_createDCtx() : (ZBUFFv07_DCtx*)*legacyContext;
355
4.87k
            if (dctx==NULL) return ERROR(memory_allocation);
356
4.87k
            ZBUFFv07_decompressInitDictionary(dctx, dict, dictSize);
357
4.87k
            *legacyContext = dctx;
358
4.87k
            return 0;
359
4.87k
        }
360
15.8k
#endif
361
15.8k
    }
362
15.8k
}
363
364
365
366
MEM_STATIC size_t ZSTD_decompressLegacyStream(void* legacyContext, U32 version,
367
                                              ZSTD_outBuffer* output, ZSTD_inBuffer* input)
368
46.9k
{
369
46.9k
    static char x;
370
    /* Avoid passing NULL to legacy decoding. */
371
46.9k
    if (output->dst == NULL) {
372
2.81k
        assert(output->size == 0);
373
2.81k
        output->dst = &x;
374
2.81k
    }
375
46.9k
    if (input->src == NULL) {
376
5.09k
        assert(input->size == 0);
377
5.09k
        input->src = &x;
378
5.09k
    }
379
46.9k
    DEBUGLOG(5, "ZSTD_decompressLegacyStream for v0.%u", version);
380
46.9k
    switch(version)
381
46.9k
    {
382
0
        default :
383
1
        case 1 :
384
4
        case 2 :
385
7
        case 3 :
386
7
            (void)legacyContext; (void)output; (void)input;
387
7
            return ERROR(version_unsupported);
388
0
#if (ZSTD_LEGACY_SUPPORT <= 4)
389
10.1k
        case 4 :
390
10.1k
            {
391
10.1k
                ZBUFFv04_DCtx* dctx = (ZBUFFv04_DCtx*) legacyContext;
392
10.1k
                const void* src = (const char*)input->src + input->pos;
393
10.1k
                size_t readSize = input->size - input->pos;
394
10.1k
                void* dst = (char*)output->dst + output->pos;
395
10.1k
                size_t decodedSize = output->size - output->pos;
396
10.1k
                size_t const hintSize = ZBUFFv04_decompressContinue(dctx, dst, &decodedSize, src, &readSize);
397
10.1k
                output->pos += decodedSize;
398
10.1k
                input->pos += readSize;
399
10.1k
                return hintSize;
400
4
            }
401
0
#endif
402
0
#if (ZSTD_LEGACY_SUPPORT <= 5)
403
8.03k
        case 5 :
404
8.03k
            {
405
8.03k
                ZBUFFv05_DCtx* dctx = (ZBUFFv05_DCtx*) legacyContext;
406
8.03k
                const void* src = (const char*)input->src + input->pos;
407
8.03k
                size_t readSize = input->size - input->pos;
408
8.03k
                void* dst = (char*)output->dst + output->pos;
409
8.03k
                size_t decodedSize = output->size - output->pos;
410
8.03k
                size_t const hintSize = ZBUFFv05_decompressContinue(dctx, dst, &decodedSize, src, &readSize);
411
8.03k
                output->pos += decodedSize;
412
8.03k
                input->pos += readSize;
413
8.03k
                return hintSize;
414
4
            }
415
0
#endif
416
0
#if (ZSTD_LEGACY_SUPPORT <= 6)
417
15.2k
        case 6 :
418
15.2k
            {
419
15.2k
                ZBUFFv06_DCtx* dctx = (ZBUFFv06_DCtx*) legacyContext;
420
15.2k
                const void* src = (const char*)input->src + input->pos;
421
15.2k
                size_t readSize = input->size - input->pos;
422
15.2k
                void* dst = (char*)output->dst + output->pos;
423
15.2k
                size_t decodedSize = output->size - output->pos;
424
15.2k
                size_t const hintSize = ZBUFFv06_decompressContinue(dctx, dst, &decodedSize, src, &readSize);
425
15.2k
                output->pos += decodedSize;
426
15.2k
                input->pos += readSize;
427
15.2k
                return hintSize;
428
4
            }
429
0
#endif
430
0
#if (ZSTD_LEGACY_SUPPORT <= 7)
431
13.5k
        case 7 :
432
13.5k
            {
433
13.5k
                ZBUFFv07_DCtx* dctx = (ZBUFFv07_DCtx*) legacyContext;
434
13.5k
                const void* src = (const char*)input->src + input->pos;
435
13.5k
                size_t readSize = input->size - input->pos;
436
13.5k
                void* dst = (char*)output->dst + output->pos;
437
13.5k
                size_t decodedSize = output->size - output->pos;
438
13.5k
                size_t const hintSize = ZBUFFv07_decompressContinue(dctx, dst, &decodedSize, src, &readSize);
439
13.5k
                output->pos += decodedSize;
440
13.5k
                input->pos += readSize;
441
13.5k
                return hintSize;
442
4
            }
443
46.9k
#endif
444
46.9k
    }
445
46.9k
}
Unexecuted instantiation: zstd_ddict.c:ZSTD_decompressLegacyStream
zstd_decompress.c:ZSTD_decompressLegacyStream
Line
Count
Source
368
46.9k
{
369
46.9k
    static char x;
370
    /* Avoid passing NULL to legacy decoding. */
371
46.9k
    if (output->dst == NULL) {
372
2.81k
        assert(output->size == 0);
373
2.81k
        output->dst = &x;
374
2.81k
    }
375
46.9k
    if (input->src == NULL) {
376
5.09k
        assert(input->size == 0);
377
5.09k
        input->src = &x;
378
5.09k
    }
379
46.9k
    DEBUGLOG(5, "ZSTD_decompressLegacyStream for v0.%u", version);
380
46.9k
    switch(version)
381
46.9k
    {
382
0
        default :
383
1
        case 1 :
384
4
        case 2 :
385
7
        case 3 :
386
7
            (void)legacyContext; (void)output; (void)input;
387
7
            return ERROR(version_unsupported);
388
0
#if (ZSTD_LEGACY_SUPPORT <= 4)
389
10.1k
        case 4 :
390
10.1k
            {
391
10.1k
                ZBUFFv04_DCtx* dctx = (ZBUFFv04_DCtx*) legacyContext;
392
10.1k
                const void* src = (const char*)input->src + input->pos;
393
10.1k
                size_t readSize = input->size - input->pos;
394
10.1k
                void* dst = (char*)output->dst + output->pos;
395
10.1k
                size_t decodedSize = output->size - output->pos;
396
10.1k
                size_t const hintSize = ZBUFFv04_decompressContinue(dctx, dst, &decodedSize, src, &readSize);
397
10.1k
                output->pos += decodedSize;
398
10.1k
                input->pos += readSize;
399
10.1k
                return hintSize;
400
4
            }
401
0
#endif
402
0
#if (ZSTD_LEGACY_SUPPORT <= 5)
403
8.03k
        case 5 :
404
8.03k
            {
405
8.03k
                ZBUFFv05_DCtx* dctx = (ZBUFFv05_DCtx*) legacyContext;
406
8.03k
                const void* src = (const char*)input->src + input->pos;
407
8.03k
                size_t readSize = input->size - input->pos;
408
8.03k
                void* dst = (char*)output->dst + output->pos;
409
8.03k
                size_t decodedSize = output->size - output->pos;
410
8.03k
                size_t const hintSize = ZBUFFv05_decompressContinue(dctx, dst, &decodedSize, src, &readSize);
411
8.03k
                output->pos += decodedSize;
412
8.03k
                input->pos += readSize;
413
8.03k
                return hintSize;
414
4
            }
415
0
#endif
416
0
#if (ZSTD_LEGACY_SUPPORT <= 6)
417
15.2k
        case 6 :
418
15.2k
            {
419
15.2k
                ZBUFFv06_DCtx* dctx = (ZBUFFv06_DCtx*) legacyContext;
420
15.2k
                const void* src = (const char*)input->src + input->pos;
421
15.2k
                size_t readSize = input->size - input->pos;
422
15.2k
                void* dst = (char*)output->dst + output->pos;
423
15.2k
                size_t decodedSize = output->size - output->pos;
424
15.2k
                size_t const hintSize = ZBUFFv06_decompressContinue(dctx, dst, &decodedSize, src, &readSize);
425
15.2k
                output->pos += decodedSize;
426
15.2k
                input->pos += readSize;
427
15.2k
                return hintSize;
428
4
            }
429
0
#endif
430
0
#if (ZSTD_LEGACY_SUPPORT <= 7)
431
13.5k
        case 7 :
432
13.5k
            {
433
13.5k
                ZBUFFv07_DCtx* dctx = (ZBUFFv07_DCtx*) legacyContext;
434
13.5k
                const void* src = (const char*)input->src + input->pos;
435
13.5k
                size_t readSize = input->size - input->pos;
436
13.5k
                void* dst = (char*)output->dst + output->pos;
437
13.5k
                size_t decodedSize = output->size - output->pos;
438
13.5k
                size_t const hintSize = ZBUFFv07_decompressContinue(dctx, dst, &decodedSize, src, &readSize);
439
13.5k
                output->pos += decodedSize;
440
13.5k
                input->pos += readSize;
441
13.5k
                return hintSize;
442
4
            }
443
46.9k
#endif
444
46.9k
    }
445
46.9k
}
446
447
448
#if defined (__cplusplus)
449
}
450
#endif
451
452
#endif   /* ZSTD_LEGACY_H */