Re-enable the partial-input test for zstd.

There were two issues here: first, zstd didn't exhibit the right
behavior unless it got a very large input.  That's fine.

The second issue was a genuine bug, fixed by 39cfaba9e2.
This commit is contained in:
Nick Mathewson 2017-04-27 10:43:38 -04:00
parent 39cfaba9e2
commit ba9f235e17

View file

@ -2274,31 +2274,34 @@ test_util_compress_impl(compress_method_t method)
"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAZ\0", "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAZAAAAAAAAAAAAAAAAAAAZ\0",
(strlen(buf1)+1)*2); (strlen(buf1)+1)*2);
if (method != ZSTD_METHOD) {
/* Check whether we can uncompress partial strings unless we are Zstandard, /* Check whether we can uncompress partial strings */
* which doesn't seem to support this. */
tor_free(buf1); tor_free(buf1);
tor_free(buf2); tor_free(buf2);
tor_free(buf3); tor_free(buf3);
buf1 = size_t b1len = 1<<10;
tor_strdup("String with low redundancy that won't be compressed much."); if (method == ZSTD_METHOD) {
tt_assert(!tor_compress(&buf2, &len1, buf1, strlen(buf1)+1, method)); // zstd needs a big input before it starts generating output that it
// can partially decompress.
b1len = 1<<18;
}
buf1 = tor_malloc(b1len);
crypto_rand(buf1, b1len);
tt_assert(!tor_compress(&buf2, &len1, buf1, b1len, method));
tt_int_op(len1, OP_GT, 16); tt_int_op(len1, OP_GT, 16);
/* when we allow an incomplete string, we should succeed.*/ /* when we allow an incomplete output we should succeed.*/
tt_assert(!tor_uncompress(&buf3, &len2, buf2, len1-16, tt_assert(!tor_uncompress(&buf3, &len2, buf2, len1-16,
method, 0, LOG_INFO)); method, 0, LOG_INFO));
tt_assert(len2 > 5); tt_int_op(len2, OP_GT, 5);
buf3[len2]='\0'; tt_int_op(len2, OP_LE, len1);
tt_assert(!strcmpstart(buf1, buf3)); tt_assert(fast_memeq(buf1, buf3, len2));
/* when we demand a complete output, this must fail. */
/* when we demand a complete string, this must fail. */
tor_free(buf3); tor_free(buf3);
tt_assert(tor_uncompress(&buf3, &len2, buf2, len1-16, tt_assert(tor_uncompress(&buf3, &len2, buf2, len1-16,
method, 1, LOG_INFO)); method, 1, LOG_INFO));
tt_assert(buf3 == NULL); tt_assert(buf3 == NULL);
}
done: done:
tor_free(buf1); tor_free(buf1);