From e3147c10c77e763615e7486e7f852f2d2e8a2fb6 Mon Sep 17 00:00:00 2001 From: atxr Date: Thu, 22 Feb 2024 11:53:40 +0100 Subject: [PATCH] Remove get encoded block --- libmineziper/include/libmineziper_zip.h | 9 ++++----- libmineziper/src/libmineziper_zip.c | 11 +++-------- tests/test_decode_fixed_tree.c | 3 ++- 3 files changed, 9 insertions(+), 14 deletions(-) diff --git a/libmineziper/include/libmineziper_zip.h b/libmineziper/include/libmineziper_zip.h index 1347ef4..3ed4de4 100644 --- a/libmineziper/include/libmineziper_zip.h +++ b/libmineziper/include/libmineziper_zip.h @@ -85,19 +85,18 @@ typedef struct zip char* start; unsigned int size; + unsigned short entries; + char* cd; - unsigned int* lfh_off; - unsigned int entries; EOCD* eocd; + unsigned int* lfh_off; + unsigned int* cdh_filename_length; } zip; zip init_zip(char* data, int size); void get_eocd(zip* out); void get_cdh(zip* out); -char* get_encoded_block(zip* in, int n); -void deflate(zip* in); - int get_number_bit_length_code(DHCH* dhch); int get_number_dist_code(DHCH* dhch); int get_number_litteral_code(DHCH* dhch); diff --git a/libmineziper/src/libmineziper_zip.c b/libmineziper/src/libmineziper_zip.c index ee73e87..267f5d5 100644 --- a/libmineziper/src/libmineziper_zip.c +++ b/libmineziper/src/libmineziper_zip.c @@ -29,8 +29,9 @@ void get_eocd(zip* z) z->entries = z->eocd->number_of_entries; z->lfh_off = malloc(z->entries * sizeof(int)); + z->cdh_filename_length = malloc(z->entries * sizeof(int)); - if (!z->lfh_off) + if (!z->lfh_off || !z->cdh_filename_length) { printf( "[ERROR] Failed to allocate CDH/LFH buffer for %d entries\n", @@ -59,19 +60,13 @@ void get_cdh(zip* z) for (int i = 0; i < z->eocd->number_of_entries; i++) { z->lfh_off[i] = cdh->off_lfh; + z->cdh_filename_length[i] = cdh->filename_length; cdh = (CDH*) (((char*) cdh) + sizeof(CDH) + cdh->filename_length + cdh->extraf_length + cdh->file_comment_length); } } -char* get_encoded_block(zip* in, int n) -{ - LFH* lfh = &in->start[in->lfh_off[n]]; - return in->start + in->lfh_off[n] + sizeof(LFH) + lfh->filename_length + - lfh->extraf_length; -} - char* decode_type1_block_vuln(bitstream* bs, char* decoded_data) { tree tr = build_default_tree(); diff --git a/tests/test_decode_fixed_tree.c b/tests/test_decode_fixed_tree.c index d52242d..efd31a2 100644 --- a/tests/test_decode_fixed_tree.c +++ b/tests/test_decode_fixed_tree.c @@ -46,7 +46,8 @@ void main(int argc, char** argv) { if (lfh->compression_method == DEFLATE) { - char* data = get_encoded_block(&zip, k); + char* data = ((char*) lfh) + sizeof(LFH) + lfh->filename_length + + lfh->extraf_length; bitstream bs = init_bitstream(data, 0 /*TODO WWEUWIEUWIEUWI*/, 0);