aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2017-04-27 10:12:48 -0400
committerNick Mathewson <nickm@torproject.org>2017-04-27 10:12:48 -0400
commit36e62ae7e2e3d7fdec074a6dd5d6d2dfa9871a9f (patch)
tree2a8b8ca58d4a284b222649a974736668abb17c50 /src
parent33a2fd065d1fd34eb4378fa2c8eb799ee5e7b172 (diff)
parente0a3819dcc5e0fa88da2c8edfb28c7db7a9d75e1 (diff)
downloadtor-36e62ae7e2e3d7fdec074a6dd5d6d2dfa9871a9f.tar.gz
tor-36e62ae7e2e3d7fdec074a6dd5d6d2dfa9871a9f.zip
Merge remote-tracking branch 'ahf/bugs/22085'
Diffstat (limited to 'src')
-rw-r--r--src/test/fuzz/fuzz_http.c4
-rw-r--r--src/test/test_buffers.c146
-rw-r--r--src/test/test_extorport.c4
-rw-r--r--src/test/test_helpers.c4
-rw-r--r--src/test/test_helpers.h2
-rw-r--r--src/test/test_util.c362
6 files changed, 171 insertions, 351 deletions
diff --git a/src/test/fuzz/fuzz_http.c b/src/test/fuzz/fuzz_http.c
index ce52acfb5b..2ffeb60244 100644
--- a/src/test/fuzz/fuzz_http.c
+++ b/src/test/fuzz/fuzz_http.c
@@ -18,10 +18,10 @@
static void
mock_connection_write_to_buf_impl_(const char *string, size_t len,
- connection_t *conn, int zlib)
+ connection_t *conn, int compressed)
{
log_debug(LD_GENERAL, "%sResponse:\n%u\nConnection: %p\n%s\n",
- zlib ? "Compressed " : "", (unsigned)len, conn, string);
+ compressed ? "Compressed " : "", (unsigned)len, conn, string);
}
static int
diff --git a/src/test/test_buffers.c b/src/test/test_buffers.c
index 43582d1b7a..bb24e7c760 100644
--- a/src/test/test_buffers.c
+++ b/src/test/test_buffers.c
@@ -578,7 +578,62 @@ test_buffer_time_tracking(void *arg)
}
static void
-test_buffers_zlib_impl(int finalize_with_nil)
+test_buffers_compress_fin_at_chunk_end_impl(compress_method_t method,
+ compression_level_t level)
+{
+ char *msg = NULL;
+ char *contents = NULL;
+ char *expanded = NULL;
+ buf_t *buf = NULL;
+ tor_compress_state_t *compress_state = NULL;
+ size_t out_len, in_len;
+ size_t sz, headerjunk;
+
+ buf = buf_new_with_capacity(128); /* will round up */
+ sz = buf_get_default_chunk_size(buf);
+ msg = tor_malloc_zero(sz);
+
+ write_to_buf(msg, 1, buf);
+ tt_assert(buf->head);
+
+ /* Fill up the chunk so the compression stuff won't fit in one chunk. */
+ tt_uint_op(buf->head->memlen, OP_LT, sz);
+ headerjunk = buf->head->memlen - 7;
+ write_to_buf(msg, headerjunk-1, buf);
+ tt_uint_op(buf->head->datalen, OP_EQ, headerjunk);
+ tt_uint_op(buf_datalen(buf), OP_EQ, headerjunk);
+ /* Write an empty string, with finalization on. */
+ compress_state = tor_compress_new(1, method, level);
+ tt_int_op(write_to_buf_compress(buf, compress_state, "", 0, 1), OP_EQ, 0);
+
+ in_len = buf_datalen(buf);
+ contents = tor_malloc(in_len);
+
+ tt_int_op(fetch_from_buf(contents, in_len, buf), OP_EQ, 0);
+
+ tt_uint_op(in_len, OP_GT, headerjunk);
+
+ tt_int_op(0, OP_EQ, tor_uncompress(&expanded, &out_len,
+ contents + headerjunk,
+ in_len - headerjunk,
+ method, 1,
+ LOG_WARN));
+
+ tt_int_op(out_len, OP_EQ, 0);
+ tt_assert(expanded);
+
+ done:
+ buf_free(buf);
+ tor_compress_free(compress_state);
+ tor_free(contents);
+ tor_free(expanded);
+ tor_free(msg);
+}
+
+static void
+test_buffers_compress_impl(compress_method_t method,
+ compression_level_t level,
+ int finalize_with_nil)
{
char *msg = NULL;
char *contents = NULL;
@@ -589,7 +644,7 @@ test_buffers_zlib_impl(int finalize_with_nil)
int done;
buf = buf_new_with_capacity(128); /* will round up */
- compress_state = tor_compress_new(1, ZLIB_METHOD, HIGH_COMPRESSION);
+ compress_state = tor_compress_new(1, method, level);
msg = tor_malloc(512);
crypto_rand(msg, 512);
@@ -613,7 +668,7 @@ test_buffers_zlib_impl(int finalize_with_nil)
tt_int_op(0, OP_EQ, tor_uncompress(&expanded, &out_len,
contents, in_len,
- ZLIB_METHOD, 1,
+ method, 1,
LOG_WARN));
tt_int_op(out_len, OP_GE, 128);
@@ -632,69 +687,37 @@ test_buffers_zlib_impl(int finalize_with_nil)
}
static void
-test_buffers_zlib(void *arg)
+test_buffers_compress(void *arg)
{
(void) arg;
- test_buffers_zlib_impl(0);
-}
-static void
-test_buffers_zlib_fin_with_nil(void *arg)
-{
- (void) arg;
- test_buffers_zlib_impl(1);
-}
-
-static void
-test_buffers_zlib_fin_at_chunk_end(void *arg)
-{
- char *msg = NULL;
- char *contents = NULL;
- char *expanded = NULL;
- buf_t *buf = NULL;
- tor_compress_state_t *compress_state = NULL;
- size_t out_len, in_len;
- size_t sz, headerjunk;
- (void) arg;
-
- buf = buf_new_with_capacity(128); /* will round up */
- sz = buf_get_default_chunk_size(buf);
- msg = tor_malloc_zero(sz);
-
- write_to_buf(msg, 1, buf);
- tt_assert(buf->head);
-
- /* Fill up the chunk so the zlib stuff won't fit in one chunk. */
- tt_uint_op(buf->head->memlen, OP_LT, sz);
- headerjunk = buf->head->memlen - 7;
- write_to_buf(msg, headerjunk-1, buf);
- tt_uint_op(buf->head->datalen, OP_EQ, headerjunk);
- tt_uint_op(buf_datalen(buf), OP_EQ, headerjunk);
- /* Write an empty string, with finalization on. */
- compress_state = tor_compress_new(1, ZLIB_METHOD, HIGH_COMPRESSION);
- tt_int_op(write_to_buf_compress(buf, compress_state, "", 0, 1), OP_EQ, 0);
-
- in_len = buf_datalen(buf);
- contents = tor_malloc(in_len);
+ compress_method_t methods[] = {
+ GZIP_METHOD,
+ ZLIB_METHOD,
+ LZMA_METHOD,
+ ZSTD_METHOD
+ };
- tt_int_op(fetch_from_buf(contents, in_len, buf), OP_EQ, 0);
+ compression_level_t levels[] = {
+ BEST_COMPRESSION,
+ HIGH_COMPRESSION,
+ MEDIUM_COMPRESSION,
+ LOW_COMPRESSION
+ };
- tt_uint_op(in_len, OP_GT, headerjunk);
+ for (unsigned m = 0; m < ARRAY_LENGTH(methods); ++m) {
+ compress_method_t method = methods[m];
- tt_int_op(0, OP_EQ, tor_uncompress(&expanded, &out_len,
- contents + headerjunk,
- in_len - headerjunk,
- ZLIB_METHOD, 1,
- LOG_WARN));
+ if (! tor_compress_supports_method(method))
+ continue;
- tt_int_op(out_len, OP_EQ, 0);
- tt_assert(expanded);
+ for (unsigned l = 0; l < ARRAY_LENGTH(levels); ++l) {
+ compression_level_t level = levels[l];
- done:
- buf_free(buf);
- tor_compress_free(compress_state);
- tor_free(contents);
- tor_free(expanded);
- tor_free(msg);
+ test_buffers_compress_impl(method, level, 0);
+ test_buffers_compress_impl(method, level, 1);
+ test_buffers_compress_fin_at_chunk_end_impl(method, level);
+ }
+ }
}
static const uint8_t *tls_read_ptr;
@@ -821,10 +844,7 @@ struct testcase_t buffer_tests[] = {
{ "allocation_tracking", test_buffer_allocation_tracking, TT_FORK,
NULL, NULL },
{ "time_tracking", test_buffer_time_tracking, TT_FORK, NULL, NULL },
- { "zlib", test_buffers_zlib, TT_FORK, NULL, NULL },
- { "zlib_fin_with_nil", test_buffers_zlib_fin_with_nil, TT_FORK, NULL, NULL },
- { "zlib_fin_at_chunk_end", test_buffers_zlib_fin_at_chunk_end, TT_FORK,
- NULL, NULL},
+ { "compress", test_buffers_compress, TT_FORK, NULL, NULL },
{ "tls_read_mocked", test_buffers_tls_read_mocked, 0,
NULL, NULL },
{ "chunk_size", test_buffers_chunk_size, 0, NULL, NULL },
diff --git a/src/test/test_extorport.c b/src/test/test_extorport.c
index 965e1824f2..fc9f27a5ac 100644
--- a/src/test/test_extorport.c
+++ b/src/test/test_extorport.c
@@ -72,9 +72,9 @@ test_ext_or_id_map(void *arg)
* writes to outbuf. */
static void
connection_write_to_buf_impl_replacement(const char *string, size_t len,
- connection_t *conn, int zlib)
+ connection_t *conn, int compressed)
{
- (void) zlib;
+ (void) compressed;
tor_assert(string);
tor_assert(conn);
diff --git a/src/test/test_helpers.c b/src/test/test_helpers.c
index a894336f07..9fada5a675 100644
--- a/src/test/test_helpers.c
+++ b/src/test/test_helpers.c
@@ -98,9 +98,9 @@ helper_setup_fake_routerlist(void)
void
connection_write_to_buf_mock(const char *string, size_t len,
- connection_t *conn, int zlib)
+ connection_t *conn, int compressed)
{
- (void) zlib;
+ (void) compressed;
tor_assert(string);
tor_assert(conn);
diff --git a/src/test/test_helpers.h b/src/test/test_helpers.h
index 293f80d173..4621631cc1 100644
--- a/src/test/test_helpers.h
+++ b/src/test/test_helpers.h
@@ -15,7 +15,7 @@ void helper_setup_fake_routerlist(void);
#define GET(path) "GET " path " HTTP/1.0\r\n\r\n"
void connection_write_to_buf_mock(const char *string, size_t len,
- connection_t *conn, int zlib);
+ connection_t *conn, int compressed);
int mock_tor_addr_lookup__fail_on_bad_addrs(const char *name,
uint16_t family, tor_addr_t *out);
diff --git a/src/test/test_util.c b/src/test/test_util.c
index d47475a24c..920766f4df 100644
--- a/src/test/test_util.c
+++ b/src/test/test_util.c
@@ -2242,44 +2242,23 @@ test_util_pow2(void *arg)
;
}
-/** Run unit tests for compression functions */
static void
-test_util_gzip(void *arg)
+test_util_compress_impl(compress_method_t method)
{
- char *buf1=NULL, *buf2=NULL, *buf3=NULL, *cp1, *cp2;
- const char *ccp2;
+ char *buf1=NULL, *buf2=NULL, *buf3=NULL;
size_t len1, len2;
- tor_compress_state_t *state = NULL;
- (void)arg;
- tt_assert(tor_compress_supports_method(GZIP_METHOD));
- tt_assert(tor_compress_supports_method(ZLIB_METHOD));
+ tt_assert(tor_compress_supports_method(method));
buf1 = tor_strdup("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAZ");
tt_assert(detect_compression_method(buf1, strlen(buf1)) == UNKNOWN_METHOD);
- tt_assert(!tor_compress(&buf2, &len1, buf1, strlen(buf1)+1,
- GZIP_METHOD));
+ tt_assert(!tor_compress(&buf2, &len1, buf1, strlen(buf1)+1, method));
tt_assert(buf2 != NULL);
tt_int_op(len1, OP_LT, strlen(buf1));
- tt_int_op(detect_compression_method(buf2, len1), OP_EQ, GZIP_METHOD);
-
- tt_assert(!tor_uncompress(&buf3, &len2, buf2, len1,
- GZIP_METHOD, 1, LOG_INFO));
- tt_assert(buf3 != NULL);
- tt_int_op(strlen(buf1) + 1, OP_EQ, len2);
- tt_str_op(buf1, OP_EQ, buf3);
-
- tor_free(buf2);
- tor_free(buf3);
-
- tt_assert(!tor_compress(&buf2, &len1, buf1, strlen(buf1)+1,
- ZLIB_METHOD));
- tt_assert(buf2);
- tt_int_op(detect_compression_method(buf2, len1), OP_EQ, ZLIB_METHOD);
+ tt_int_op(detect_compression_method(buf2, len1), OP_EQ, method);
- tt_assert(!tor_uncompress(&buf3, &len2, buf2, len1,
- ZLIB_METHOD, 1, LOG_INFO));
+ tt_assert(!tor_uncompress(&buf3, &len2, buf2, len1, method, 1, LOG_INFO));
tt_assert(buf3 != NULL);
tt_int_op(strlen(buf1) + 1, OP_EQ, len2);
tt_str_op(buf1, OP_EQ, buf3);
@@ -2288,42 +2267,55 @@ test_util_gzip(void *arg)
tor_free(buf3);
buf2 = tor_reallocarray(buf2, len1, 2);
memcpy(buf2+len1, buf2, len1);
- tt_assert(!tor_uncompress(&buf3, &len2, buf2, len1*2,
- ZLIB_METHOD, 1, LOG_INFO));
+ tt_assert(!tor_uncompress(&buf3, &len2, buf2, len1*2, method, 1, LOG_INFO));
tt_int_op((strlen(buf1)+1)*2, OP_EQ, len2);
tt_mem_op(buf3, OP_EQ,
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAZ\0"
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAZ\0",
(strlen(buf1)+1)*2);
+ if (method != ZSTD_METHOD) {
+ /* Check whether we can uncompress partial strings unless we are Zstandard,
+ * which doesn't seem to support this. */
+
+ tor_free(buf1);
+ tor_free(buf2);
+ tor_free(buf3);
+
+ buf1 =
+ tor_strdup("String with low redundancy that won't be compressed much.");
+ tt_assert(!tor_compress(&buf2, &len1, buf1, strlen(buf1)+1, method));
+ tt_int_op(len1, OP_GT, 16);
+ /* when we allow an incomplete string, we should succeed.*/
+ tt_assert(!tor_uncompress(&buf3, &len2, buf2, len1-16,
+ method, 0, LOG_INFO));
+ tt_assert(len2 > 5);
+ buf3[len2]='\0';
+ tt_assert(!strcmpstart(buf1, buf3));
+
+ /* when we demand a complete string, this must fail. */
+ tor_free(buf3);
+ tt_assert(tor_uncompress(&buf3, &len2, buf2, len1-16,
+ method, 1, LOG_INFO));
+ tt_assert(buf3 == NULL);
+ }
+
+ done:
tor_free(buf1);
tor_free(buf2);
tor_free(buf3);
+}
- /* Check whether we can uncompress partial strings. */
- buf1 =
- tor_strdup("String with low redundancy that won't be compressed much.");
- tt_assert(!tor_compress(&buf2, &len1, buf1, strlen(buf1)+1,
- ZLIB_METHOD));
- tt_int_op(len1, OP_GT, 16);
- /* when we allow an incomplete string, we should succeed.*/
- tt_assert(!tor_uncompress(&buf3, &len2, buf2, len1-16,
- ZLIB_METHOD, 0, LOG_INFO));
- tt_assert(len2 > 5);
- buf3[len2]='\0';
- tt_assert(!strcmpstart(buf1, buf3));
-
- /* when we demand a complete string, this must fail. */
- tor_free(buf3);
- tt_assert(tor_uncompress(&buf3, &len2, buf2, len1-16,
- ZLIB_METHOD, 1, LOG_INFO));
- tt_assert(buf3 == NULL);
+static void
+test_util_compress_stream_impl(compress_method_t method,
+ compression_level_t level)
+{
+ char *buf1=NULL, *buf2=NULL, *buf3=NULL, *cp1, *cp2;
+ const char *ccp2;
+ size_t len1, len2;
- /* Now, try streaming compression. */
- tor_free(buf1);
- tor_free(buf2);
- tor_free(buf3);
- state = tor_compress_new(1, ZLIB_METHOD, HIGH_COMPRESSION);
+ tor_compress_state_t *state = NULL;
+ state = tor_compress_new(1, method, level);
tt_assert(state);
cp1 = buf1 = tor_malloc(1024);
len1 = 1024;
@@ -2342,7 +2334,7 @@ test_util_gzip(void *arg)
tt_assert(cp1 > cp2); /* Make sure we really added something. */
tt_assert(!tor_uncompress(&buf3, &len2, buf1, 1024-len1,
- ZLIB_METHOD, 1, LOG_WARN));
+ method, 1, LOG_WARN));
/* Make sure it compressed right. */
tt_str_op(buf3, OP_EQ, "ABCDEFGHIJABCDEFGHIJ");
tt_int_op(21, OP_EQ, len2);
@@ -2350,9 +2342,43 @@ test_util_gzip(void *arg)
done:
if (state)
tor_compress_free(state);
+ tor_free(buf1);
tor_free(buf2);
tor_free(buf3);
- tor_free(buf1);
+}
+
+/** Run unit tests for compression functions */
+static void
+test_util_compress(void *arg)
+{
+ (void) arg;
+ compress_method_t methods[] = {
+ GZIP_METHOD,
+ ZLIB_METHOD,
+ LZMA_METHOD,
+ ZSTD_METHOD
+ };
+
+ compression_level_t levels[] = {
+ BEST_COMPRESSION,
+ HIGH_COMPRESSION,
+ MEDIUM_COMPRESSION,
+ LOW_COMPRESSION
+ };
+
+ for (unsigned m = 0; m < ARRAY_LENGTH(methods); ++m) {
+ compress_method_t method = methods[m];
+
+ if (! tor_compress_supports_method(method))
+ continue;
+
+ test_util_compress_impl(method);
+
+ for (unsigned l = 0; l < ARRAY_LENGTH(levels); ++l) {
+ compression_level_t level = levels[l];
+ test_util_compress_stream_impl(method, level);
+ }
+ }
}
static void
@@ -2407,230 +2433,6 @@ test_util_gzip_compression_bomb(void *arg)
tor_compress_free(state);
}
-static void
-test_util_lzma(void *arg)
-{
-#ifdef HAVE_LZMA
- char *buf1=NULL, *buf2=NULL, *buf3=NULL, *cp1, *cp2;
- const char *ccp2;
- size_t len1, len2;
- tor_compress_state_t *state = NULL;
-
- (void)arg;
- tt_assert(tor_compress_supports_method(LZMA_METHOD));
-
- buf1 = tor_strdup("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAZ");
- tt_assert(detect_compression_method(buf1, strlen(buf1)) == UNKNOWN_METHOD);
-
- tt_assert(!tor_compress(&buf2, &len1, buf1, strlen(buf1)+1,
- LZMA_METHOD));
- tt_assert(buf2 != NULL);
- tt_int_op(len1, OP_LT, strlen(buf1));
- tt_int_op(detect_compression_method(buf2, len1), OP_EQ, LZMA_METHOD);
-
- tt_assert(!tor_uncompress(&buf3, &len2, buf2, len1,
- LZMA_METHOD, 1, LOG_INFO));
- tt_assert(buf3 != NULL);
- tt_int_op(strlen(buf1) + 1, OP_EQ, len2);
- tt_str_op(buf1, OP_EQ, buf3);
-
- tor_free(buf1);
- tor_free(buf2);
- tor_free(buf3);
-
-#if 0
- /* Check whether we can uncompress concatenated, compressed strings. */
- tor_free(buf3);
- buf2 = tor_reallocarray(buf2, len1, 2);
- memcpy(buf2+len1, buf2, len1);
- tt_assert(!tor_uncompress(&buf3, &len2, buf2, len1*2,
- LZMA_METHOD, 1, LOG_INFO));
- tt_int_op((strlen(buf1)+1)*2, OP_EQ, len2);
- tt_mem_op(buf3, OP_EQ,
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAZ\0"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAZ\0",
- (strlen(buf1)+1)*2);
-
- tor_free(buf1);
- tor_free(buf2);
- tor_free(buf3);
-
- /* Check whether we can uncompress partial strings. */
- buf1 =
- tor_strdup("String with low redundancy that won't be compressed much.");
- tt_assert(!tor_compress(&buf2, &len1, buf1, strlen(buf1)+1,
- LZMA_METHOD));
- tt_int_op(len1, OP_GT, 16);
- /* when we allow an incomplete string, we should succeed.*/
- tt_assert(!tor_uncompress(&buf3, &len2, buf2, len1-16,
- LZMA_METHOD, 0, LOG_INFO));
- tt_assert(len2 > 5);
- buf3[len2]='\0';
- tt_assert(!strcmpstart(buf1, buf3));
-
- /* when we demand a complete string, this must fail. */
- tor_free(buf3);
- tt_assert(tor_uncompress(&buf3, &len2, buf2, len1-16,
- LZMA_METHOD, 1, LOG_INFO));
- tt_assert(buf3 == NULL);
-
- tor_free(buf1);
- tor_free(buf2);
- tor_free(buf3);
-#endif
-
- /* Now, try streaming compression. */
- state = tor_compress_new(1, LZMA_METHOD, HIGH_COMPRESSION);
- tt_assert(state);
- cp1 = buf1 = tor_malloc(1024);
- len1 = 1024;
- ccp2 = "ABCDEFGHIJABCDEFGHIJ";
- len2 = 21;
- tt_int_op(tor_compress_process(state, &cp1, &len1, &ccp2, &len2, 0),
- OP_EQ, TOR_COMPRESS_OK);
- tt_int_op(0, OP_EQ, len2); /* Make sure we compressed it all. */
- tt_assert(cp1 > buf1);
-
- len2 = 0;
- cp2 = cp1;
- tt_int_op(tor_compress_process(state, &cp1, &len1, &ccp2, &len2, 1),
- OP_EQ, TOR_COMPRESS_DONE);
- tt_int_op(0, OP_EQ, len2);
- tt_assert(cp1 > cp2); /* Make sure we really added something. */
-
- tt_assert(!tor_uncompress(&buf3, &len2, buf1, 1024-len1,
- LZMA_METHOD, 1, LOG_WARN));
- /* Make sure it compressed right. */
- tt_str_op(buf3, OP_EQ, "ABCDEFGHIJABCDEFGHIJ");
- tt_int_op(21, OP_EQ, len2);
-
- done:
- if (state)
- tor_compress_free(state);
- tor_free(buf2);
- tor_free(buf3);
- tor_free(buf1);
-#else
- (void)arg;
- tt_assert(! tor_compress_supports_method(LZMA_METHOD));
-
- done:
- ;
-#endif // HAVE_LZMA.
-}
-
-static void
-test_util_zstd(void *arg)
-{
-#ifdef HAVE_ZSTD
- char *buf1=NULL, *buf2=NULL, *buf3=NULL, *cp1, *cp2;
- const char *ccp2;
- size_t len1, len2;
- tor_compress_state_t *state = NULL;
-
- (void)arg;
- tt_assert(tor_compress_supports_method(ZSTD_METHOD));
-
- buf1 = tor_strdup("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAZ");
- tt_assert(detect_compression_method(buf1, strlen(buf1)) == UNKNOWN_METHOD);
-
- tt_assert(!tor_compress(&buf2, &len1, buf1, strlen(buf1)+1,
- ZSTD_METHOD));
- tt_assert(buf2 != NULL);
- tt_int_op(len1, OP_LT, strlen(buf1));
- tt_int_op(detect_compression_method(buf2, len1), OP_EQ, ZSTD_METHOD);
-
- tt_assert(!tor_uncompress(&buf3, &len2, buf2, len1,
- ZSTD_METHOD, 1, LOG_INFO));
- tt_assert(buf3 != NULL);
- tt_int_op(strlen(buf1) + 1, OP_EQ, len2);
- tt_str_op(buf1, OP_EQ, buf3);
-
- tor_free(buf1);
- tor_free(buf2);
- tor_free(buf3);
-
-#if 0
- /* Check whether we can uncompress concatenated, compressed strings. */
- tor_free(buf3);
- buf2 = tor_reallocarray(buf2, len1, 2);
- memcpy(buf2+len1, buf2, len1);
- tt_assert(!tor_uncompress(&buf3, &len2, buf2, len1*2,
- ZSTD_METHOD, 1, LOG_INFO));
- tt_int_op((strlen(buf1)+1)*2, OP_EQ, len2);
- tt_mem_op(buf3, OP_EQ,
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAZ\0"
- "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAZ\0",
- (strlen(buf1)+1)*2);
-
- tor_free(buf1);
- tor_free(buf2);
- tor_free(buf3);
-
- /* Check whether we can uncompress partial strings. */
- buf1 =
- tor_strdup("String with low redundancy that won't be compressed much.");
- tt_assert(!tor_compress(&buf2, &len1, buf1, strlen(buf1)+1,
- ZSTD_METHOD));
- tt_int_op(len1, OP_GT, 16);
- /* when we allow an incomplete string, we should succeed.*/
- tt_assert(!tor_uncompress(&buf3, &len2, buf2, len1-16,
- ZSTD_METHOD, 0, LOG_INFO));
- tt_assert(len2 > 5);
- buf3[len2]='\0';
- tt_assert(!strcmpstart(buf1, buf3));
-
- /* when we demand a complete string, this must fail. */
- tor_free(buf3);
- tt_assert(tor_uncompress(&buf3, &len2, buf2, len1-16,
- ZSTD_METHOD, 1, LOG_INFO));
- tt_assert(buf3 == NULL);
-
- tor_free(buf1);
- tor_free(buf2);
- tor_free(buf3);
-#endif
-
- /* Now, try streaming compression. */
- state = tor_compress_new(1, ZSTD_METHOD, HIGH_COMPRESSION);
- tt_assert(state);
- cp1 = buf1 = tor_malloc(1024);
- len1 = 1024;
- ccp2 = "ABCDEFGHIJABCDEFGHIJ";
- len2 = 21;
- tt_int_op(tor_compress_process(state, &cp1, &len1, &ccp2, &len2, 0),
- OP_EQ, TOR_COMPRESS_OK);
- tt_int_op(0, OP_EQ, len2); /* Make sure we compressed it all. */
-// tt_assert(cp1 > buf1);
-
- len2 = 0;
- cp2 = cp1;
- tt_int_op(tor_compress_process(state, &cp1, &len1, &ccp2, &len2, 1),
- OP_EQ, TOR_COMPRESS_DONE);
- tt_int_op(0, OP_EQ, len2);
- tt_assert(cp1 > cp2); /* Make sure we really added something. */
-
- tt_assert(!tor_uncompress(&buf3, &len2, buf1, 1024-len1,
- ZSTD_METHOD, 1, LOG_WARN));
- /* Make sure it compressed right. */
- tt_str_op(buf3, OP_EQ, "ABCDEFGHIJABCDEFGHIJ");
- tt_int_op(21, OP_EQ, len2);
-
- done:
- if (state)
- tor_compress_free(state);
- tor_free(buf2);
- tor_free(buf3);
- tor_free(buf1);
-#else
- (void)arg;
- tt_assert(! tor_compress_supports_method(ZSTD_METHOD));
-
- done:
- ;
-#endif // HAVE_ZSTD.
-}
-
/** Run unit tests for mmap() wrapper functionality. */
static void
test_util_mmap(void *arg)
@@ -5942,10 +5744,8 @@ struct testcase_t util_tests[] = {
UTIL_LEGACY(strmisc),
UTIL_TEST(parse_integer, 0),
UTIL_LEGACY(pow2),
- UTIL_LEGACY(gzip),
+ UTIL_LEGACY(compress),
UTIL_TEST(gzip_compression_bomb, TT_FORK),
- UTIL_LEGACY(lzma),
- UTIL_LEGACY(zstd),
UTIL_LEGACY(datadir),
UTIL_LEGACY(memarea),
UTIL_LEGACY(control_formats),