Some fixes

- seek in try_to_decompress is needed
- don't keep on allocating decomp_io_buf memory
This commit is contained in:
Christian Schneider 2017-08-30 06:46:26 +02:00
parent ec2bb6d231
commit 3709606149
2 changed files with 9 additions and 9 deletions

View file

@ -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<long long>();
brute_ignore_offsets = new set<long long>();
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;

View file

@ -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);