@@ -111,6 +111,18 @@ HUF_PUBLIC_API size_t HUF_compress2 (void* dst, size_t dstCapacity, const void*
111
111
#define HUF_WORKSPACE_SIZE_U32 (HUF_WORKSPACE_SIZE / sizeof(U32))
112
112
HUF_PUBLIC_API size_t HUF_compress4X_wksp (void * dst , size_t dstCapacity , const void * src , size_t srcSize , unsigned maxSymbolValue , unsigned tableLog , void * workSpace , size_t wkspSize );
113
113
114
+ /**
115
+ * The minimum workspace size for the `workSpace` used in
116
+ * HUF_readDTableX2_wksp() and HUF_readDTableX4_wksp().
117
+ *
118
+ * The space used depends on HUF_TABLELOG_MAX, ranging from ~1500 bytes when
119
+ * HUF_TABLE_LOG_MAX=12 to ~1850 bytes when HUF_TABLE_LOG_MAX=15.
120
+ * Buffer overflow errors may potentially occur if code modifications result in
121
+ * a required workspace size greater than that specified in the following
122
+ * macro.
123
+ */
124
+ #define HUF_DECOMPRESS_WORKSPACE_SIZE (2 << 10)
125
+ #define HUF_DECOMPRESS_WORKSPACE_SIZE_U32 (HUF_DECOMPRESS_WORKSPACE_SIZE / sizeof(U32))
114
126
115
127
116
128
/* ******************************************************************
@@ -170,8 +182,11 @@ size_t HUF_decompress4X4 (void* dst, size_t dstSize, const void* cSrc, size_t cS
170
182
171
183
size_t HUF_decompress4X_DCtx (HUF_DTable * dctx , void * dst , size_t dstSize , const void * cSrc , size_t cSrcSize ); /**< decodes RLE and uncompressed */
172
184
size_t HUF_decompress4X_hufOnly (HUF_DTable * dctx , void * dst , size_t dstSize , const void * cSrc , size_t cSrcSize ); /**< considers RLE and uncompressed as errors */
185
+ size_t HUF_decompress4X_hufOnly_wksp (HUF_DTable * dctx , void * dst , size_t dstSize , const void * cSrc , size_t cSrcSize , void * workSpace , size_t wkspSize ); /**< considers RLE and uncompressed as errors */
173
186
size_t HUF_decompress4X2_DCtx (HUF_DTable * dctx , void * dst , size_t dstSize , const void * cSrc , size_t cSrcSize ); /**< single-symbol decoder */
187
+ size_t HUF_decompress4X2_DCtx_wksp (HUF_DTable * dctx , void * dst , size_t dstSize , const void * cSrc , size_t cSrcSize , void * workSpace , size_t wkspSize ); /**< single-symbol decoder */
174
188
size_t HUF_decompress4X4_DCtx (HUF_DTable * dctx , void * dst , size_t dstSize , const void * cSrc , size_t cSrcSize ); /**< double-symbols decoder */
189
+ size_t HUF_decompress4X4_DCtx_wksp (HUF_DTable * dctx , void * dst , size_t dstSize , const void * cSrc , size_t cSrcSize , void * workSpace , size_t wkspSize ); /**< double-symbols decoder */
175
190
176
191
177
192
/* ****************************************
@@ -243,7 +258,9 @@ HUF_decompress() does the following:
243
258
U32 HUF_selectDecoder (size_t dstSize , size_t cSrcSize );
244
259
245
260
size_t HUF_readDTableX2 (HUF_DTable * DTable , const void * src , size_t srcSize );
261
+ size_t HUF_readDTableX2_wksp (HUF_DTable * DTable , const void * src , size_t srcSize , void * workSpace , size_t wkspSize );
246
262
size_t HUF_readDTableX4 (HUF_DTable * DTable , const void * src , size_t srcSize );
263
+ size_t HUF_readDTableX4_wksp (HUF_DTable * DTable , const void * src , size_t srcSize , void * workSpace , size_t wkspSize );
247
264
248
265
size_t HUF_decompress4X_usingDTable (void * dst , size_t maxDstSize , const void * cSrc , size_t cSrcSize , const HUF_DTable * DTable );
249
266
size_t HUF_decompress4X2_usingDTable (void * dst , size_t maxDstSize , const void * cSrc , size_t cSrcSize , const HUF_DTable * DTable );
@@ -266,8 +283,11 @@ size_t HUF_decompress1X2 (void* dst, size_t dstSize, const void* cSrc, size_t cS
266
283
size_t HUF_decompress1X4 (void * dst , size_t dstSize , const void * cSrc , size_t cSrcSize ); /* double-symbol decoder */
267
284
268
285
size_t HUF_decompress1X_DCtx (HUF_DTable * dctx , void * dst , size_t dstSize , const void * cSrc , size_t cSrcSize );
286
+ size_t HUF_decompress1X_DCtx_wksp (HUF_DTable * dctx , void * dst , size_t dstSize , const void * cSrc , size_t cSrcSize , void * workSpace , size_t wkspSize );
269
287
size_t HUF_decompress1X2_DCtx (HUF_DTable * dctx , void * dst , size_t dstSize , const void * cSrc , size_t cSrcSize ); /**< single-symbol decoder */
288
+ size_t HUF_decompress1X2_DCtx_wksp (HUF_DTable * dctx , void * dst , size_t dstSize , const void * cSrc , size_t cSrcSize , void * workSpace , size_t wkspSize ); /**< single-symbol decoder */
270
289
size_t HUF_decompress1X4_DCtx (HUF_DTable * dctx , void * dst , size_t dstSize , const void * cSrc , size_t cSrcSize ); /**< double-symbols decoder */
290
+ size_t HUF_decompress1X4_DCtx_wksp (HUF_DTable * dctx , void * dst , size_t dstSize , const void * cSrc , size_t cSrcSize , void * workSpace , size_t wkspSize ); /**< double-symbols decoder */
271
291
272
292
size_t HUF_decompress1X_usingDTable (void * dst , size_t maxDstSize , const void * cSrc , size_t cSrcSize , const HUF_DTable * DTable ); /**< automatic selection of sing or double symbol decoder, based on DTable */
273
293
size_t HUF_decompress1X2_usingDTable (void * dst , size_t maxDstSize , const void * cSrc , size_t cSrcSize , const HUF_DTable * DTable );
0 commit comments