From 3709606149908897eb44a5bcbd741be126b14b76 Mon Sep 17 00:00:00 2001 From: Christian Schneider Date: Wed, 30 Aug 2017 06:46:26 +0200 Subject: [PATCH] Some fixes - seek in try_to_decompress is needed - don't keep on allocating decomp_io_buf memory --- precomp.cpp | 16 ++++++++-------- precomp.h | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/precomp.cpp b/precomp.cpp index 14ce558..b6bb352 100644 --- a/precomp.cpp +++ b/precomp.cpp @@ -2144,6 +2144,7 @@ void denit_compress() { if (recursion_depth == 0) { free(ignore_list); } + if (decomp_io_buf != NULL) delete[] decomp_io_buf; denit(); } @@ -3152,12 +3153,6 @@ void init_decompression_variables() { best_identical_bytes_decomp = -1; identical_bytes_decomp = -1; final_compression_found = false; - - decomp_io_buf = new unsigned char[MAX_IO_BUFFER_SIZE]; -} - -void denit_decompression_variables() { - if (decomp_io_buf != NULL) delete[] decomp_io_buf; } void try_decompression_pdf(int windowbits, int pdf_header_length, int img_width, int img_height, int img_bpc) { @@ -3549,8 +3544,6 @@ void try_decompression_zip(int zip_header_length) { } } - - denit_decompression_variables(); } void sort_comp_mem_levels() { @@ -3674,6 +3667,7 @@ bool compress_file(float min_percent, float max_percent) { init_temp_files(); intense_ignore_offsets = new set(); brute_ignore_offsets = new set(); + decomp_io_buf = new unsigned char[MAX_IO_BUFFER_SIZE]; global_min_percent = min_percent; global_max_percent = max_percent; @@ -6037,6 +6031,12 @@ int try_to_decompress(FILE* file, int windowbits, int& compressed_stream_size, b print_work_sign(true); + if (file == fin) { + seek_64(file, input_file_pos); + } else { + seek_64(file, 0); + } + in_memory = true; r = inf(file, windowbits, compressed_stream_size, decompressed_stream_size, in_memory); if (r == Z_OK) return decompressed_stream_size; diff --git a/precomp.h b/precomp.h index 324af7d..87f9ea9 100644 --- a/precomp.h +++ b/precomp.h @@ -1,5 +1,5 @@ int def(FILE *source, FILE *dest, int level, int windowbits, int memlevel); -int def_compare(FILE *compfile, int level, int windowbits, int memlevel, int& decompressed_bytes_used); +int def_compare(FILE *compfile, int level, int windowbits, int memlevel, int& decompressed_bytes_used, int decompressed_bytes_total, bool in_memory); int def_compare_bzip2(FILE *source, FILE *compfile, int level, int& decompressed_bytes_used); int def_part(FILE *source, FILE *dest, int level, int windowbits, int memlevel, int stream_size_in, int stream_size_out); int def_part_skip(FILE *source, FILE *dest, int level, int windowbits, int memlevel, int stream_size_in, int stream_size_out, int bmp_width);