#include "sha1.h"
#include "randgen.h"
#include "test-common.h"
+#include "istream-zlib.h"
#include "compression.h"
#include <unistd.h>
test_end();
}
+static void test_gz_large_header(void)
+{
+ static const unsigned char gz_input[] = {
+ 0x1f, 0x8b, 0x08, 0x08,
+ 'a','a','a','a','a','a','a','a','a','a','a',
+ 0
+ };
+ struct istream *file_input, *input;
+ size_t i;
+
+ test_begin("gz large header");
+
+ /* max buffer size smaller than gz header */
+ for (i = 1; i < sizeof(gz_input); i++) {
+ file_input = test_istream_create_data(gz_input, sizeof(gz_input));
+ test_istream_set_size(file_input, i);
+ test_istream_set_max_buffer_size(file_input, i);
+
+ input = i_stream_create_gz(file_input, FALSE);
+ test_assert_idx(i_stream_read(input) == 0, i);
+ test_assert_idx(i_stream_read(input) == -1 &&
+ input->stream_errno == EINVAL, i);
+ i_stream_unref(&input);
+ i_stream_unref(&file_input);
+ }
+
+ /* max buffer size is exactly the gz header */
+ file_input = test_istream_create_data(gz_input, sizeof(gz_input));
+ input = i_stream_create_gz(file_input, FALSE);
+ test_istream_set_size(input, i);
+ test_istream_set_allow_eof(input, FALSE);
+ test_istream_set_max_buffer_size(input, i);
+ test_assert(i_stream_read(input) == 0);
+ i_stream_unref(&input);
+ i_stream_unref(&file_input);
+
+ test_end();
+}
+
static void test_uncompress_file(const char *path)
{
const struct compression_handler *handler;
test_compression,
test_gz_concat,
test_gz_no_concat,
+ test_gz_large_header,
NULL
};
if (argc == 2) {