mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
If we successfully decompress an HTTP body, return immediately.
This prevents us from calling allowed_anonymous_connection_compression_method() on the unused guessed method (if any), and rejecting something that was already safe to use.
This commit is contained in:
@@ -0,0 +1,6 @@
|
||||
o Minor bugfixes (compression):
|
||||
- When decompressing an object received over an anonymous directory
|
||||
connection, if we have already successfully decompressed it using an
|
||||
acceptable compression method, do not reject it for looking like an
|
||||
unacceptable compression method. Fixes part of bug 22670; bugfix on
|
||||
0.3.1.1-alpha.
|
||||
+19
-7
@@ -2255,9 +2255,15 @@ dir_client_decompress_response_body(char **bodyp, size_t *bodylenp,
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (tor_compress_supports_method(compression))
|
||||
if (tor_compress_supports_method(compression)) {
|
||||
tor_uncompress(&new_body, &new_len, body, body_len, compression,
|
||||
!allow_partial, LOG_PROTOCOL_WARN);
|
||||
if (new_body) {
|
||||
/* We succeeded with the declared compression method. Great! */
|
||||
rv = 0;
|
||||
goto done;
|
||||
}
|
||||
}
|
||||
|
||||
/* Okay, if that didn't work, and we think that it was compressed
|
||||
* differently, try that. */
|
||||
@@ -2268,7 +2274,7 @@ dir_client_decompress_response_body(char **bodyp, size_t *bodylenp,
|
||||
goto done;
|
||||
}
|
||||
|
||||
if (!new_body && tor_compress_supports_method(guessed) &&
|
||||
if (tor_compress_supports_method(guessed) &&
|
||||
compression != guessed) {
|
||||
tor_uncompress(&new_body, &new_len, body, body_len, guessed,
|
||||
!allow_partial, LOG_INFO);
|
||||
@@ -2286,13 +2292,19 @@ dir_client_decompress_response_body(char **bodyp, size_t *bodylenp,
|
||||
rv = -1;
|
||||
goto done;
|
||||
}
|
||||
if (new_body) {
|
||||
tor_free(*bodyp);
|
||||
*bodyp = new_body;
|
||||
*bodylenp = new_len;
|
||||
}
|
||||
|
||||
done:
|
||||
if (new_body) {
|
||||
if (rv == 0) {
|
||||
/* success! */
|
||||
tor_free(*bodyp);
|
||||
*bodyp = new_body;
|
||||
*bodylenp = new_len;
|
||||
} else {
|
||||
tor_free(new_body);
|
||||
}
|
||||
}
|
||||
|
||||
return rv;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user