mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 13:53:31 +01:00
zstd: Check errors right affer compressing/decompressing
Considering a compression bomb before looking for errors led to false negative log warnings. Instead, it is possible the work failed for whatever reasons which is not indicative of a compression bomb. Fixes #40739 Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
parent
78cb761612
commit
fd3f9e8580
6
changes/ticket40739
Normal file
6
changes/ticket40739
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
o Minor bugfixes (compression):
|
||||||
|
- Right after compression/decompression work is done, check for errors.
|
||||||
|
Before this, we would consider compression bomb before that and then
|
||||||
|
looking for errors leading to false positive on that log warning. Fixes
|
||||||
|
bug 40739; bugfix on 0.3.5.1-alpha. Patch by "cypherpunks".
|
||||||
|
|
@ -368,6 +368,13 @@ tor_zstd_compress_process(tor_zstd_compress_state_t *state,
|
|||||||
&output, &input);
|
&output, &input);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ZSTD_isError(retval)) {
|
||||||
|
log_warn(LD_GENERAL, "Zstandard %s didn't finish: %s.",
|
||||||
|
state->compress ? "compression" : "decompression",
|
||||||
|
ZSTD_getErrorName(retval));
|
||||||
|
return TOR_COMPRESS_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
state->input_so_far += input.pos;
|
state->input_so_far += input.pos;
|
||||||
state->output_so_far += output.pos;
|
state->output_so_far += output.pos;
|
||||||
|
|
||||||
@ -383,13 +390,6 @@ tor_zstd_compress_process(tor_zstd_compress_state_t *state,
|
|||||||
return TOR_COMPRESS_ERROR;
|
return TOR_COMPRESS_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ZSTD_isError(retval)) {
|
|
||||||
log_warn(LD_GENERAL, "Zstandard %s didn't finish: %s.",
|
|
||||||
state->compress ? "compression" : "decompression",
|
|
||||||
ZSTD_getErrorName(retval));
|
|
||||||
return TOR_COMPRESS_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (state->compress && !state->have_called_end) {
|
if (state->compress && !state->have_called_end) {
|
||||||
retval = ZSTD_flushStream(state->u.compress_stream, &output);
|
retval = ZSTD_flushStream(state->u.compress_stream, &output);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user