Skip to content

Commit

Permalink
.zst, .br: avoid setting of size hint for unknown size by -si, sinc…
Browse files Browse the repository at this point in the history
…e unpackSize will be supplied as -1 (`UINT64_MAX`)
  • Loading branch information
sebres committed Sep 14, 2023
1 parent 8a5e1c8 commit 1eca571
Show file tree
Hide file tree
Showing 3 changed files with 5 additions and 4 deletions.
4 changes: 2 additions & 2 deletions C/zstdmt/brotli-mt_compress.c
Expand Up @@ -383,7 +383,7 @@ static size_t st_compress(void *arg)
/* 0, or not specified by user; could be chosen by compressor. */
uint32_t lgwin = 24 /* DEFAULT_LGWIN */;
/* Use file size to limit lgwin. */
if (ctx->unpackSize >= 0) {
if (ctx->unpackSize >= 0 && ctx->unpackSize != (uint64_t)(int64_t)-1) {
lgwin = BROTLI_MIN_WINDOW_BITS;
while (BROTLI_MAX_BACKWARD_LIMIT(lgwin) <
(uint64_t)ctx->unpackSize) {
Expand All @@ -393,7 +393,7 @@ static size_t st_compress(void *arg)
}
BrotliEncoderSetParameter(state, BROTLI_PARAM_LGWIN, lgwin);
}
if (ctx->unpackSize > 0) {
if (ctx->unpackSize > 0 && ctx->unpackSize != (uint64_t)(int64_t)-1) {
uint32_t size_hint = ctx->unpackSize < (1 << 30) ?
(uint32_t)ctx->unpackSize : (1u << 30);
BrotliEncoderSetParameter(state, BROTLI_PARAM_SIZE_HINT, size_hint);
Expand Down
3 changes: 2 additions & 1 deletion CPP/7zip/Compress/BrotliEncoder.cpp
Expand Up @@ -15,7 +15,8 @@ CEncoder::CEncoder():
_numThreads(NWindows::NSystem::GetNumberOfProcessors()),
_Long(-1),
_WindowLog(-1),
_ctx(NULL)
_ctx(NULL),
unpackSize(0)
{
_props.clear();
}
Expand Down
2 changes: 1 addition & 1 deletion CPP/7zip/Compress/ZstdEncoder.cpp
Expand Up @@ -263,7 +263,7 @@ STDMETHODIMP CEncoder::Code(ISequentialInStream *inStream,
if (ZSTD_isError(err)) return E_INVALIDARG;
}

if (unpackSize) {
if (unpackSize && unpackSize != (UInt64)(Int64)-1) { // size is known
err = ZSTD_CCtx_setParameter(_ctx, ZSTD_c_srcSizeHint, (int)(unpackSize <= INT_MAX ? unpackSize : INT_MAX));
if (ZSTD_isError(err)) return E_INVALIDARG;
}
Expand Down

0 comments on commit 1eca571

Please sign in to comment.