diff options
-rw-r--r-- | archival/libunarchive/decompress_unzip.c | 11 | ||||
-rw-r--r-- | archival/libunarchive/unzip.c | 11 | ||||
-rw-r--r-- | libbb/unzip.c | 11 |
3 files changed, 27 insertions, 6 deletions
diff --git a/archival/libunarchive/decompress_unzip.c b/archival/libunarchive/decompress_unzip.c index b843ec812..9568c2870 100644 --- a/archival/libunarchive/decompress_unzip.c +++ b/archival/libunarchive/decompress_unzip.c @@ -904,6 +904,7 @@ extern int unzip(FILE *l_in_file, FILE *l_out_file) int method; typedef void (*sig_type) (int); int exit_code=0; /* program exit code */ + int i; in_file = l_in_file; out_file = l_out_file; @@ -949,10 +950,16 @@ extern int unzip(FILE *l_in_file, FILE *l_out_file) flags = (unsigned char) fgetc(in_file); /* Ignore time stamp(4), extra flags(1), OS type(1) */ - fseek(in_file, 6, SEEK_CUR); + for (i = 0; i < 6; i++) + fgetc(in_file); if ((flags & extra_field) != 0) { - fseek(in_file, (size_t) fgetc(in_file) + ((size_t)fgetc(in_file) << 8), SEEK_CUR); + size_t extra; + extra = fgetc(in_file); + extra += fgetc(in_file) << 8; + + for (i = 0; i < extra; i++) + fgetc(in_file); } /* Discard original name if any */ diff --git a/archival/libunarchive/unzip.c b/archival/libunarchive/unzip.c index b843ec812..9568c2870 100644 --- a/archival/libunarchive/unzip.c +++ b/archival/libunarchive/unzip.c @@ -904,6 +904,7 @@ extern int unzip(FILE *l_in_file, FILE *l_out_file) int method; typedef void (*sig_type) (int); int exit_code=0; /* program exit code */ + int i; in_file = l_in_file; out_file = l_out_file; @@ -949,10 +950,16 @@ extern int unzip(FILE *l_in_file, FILE *l_out_file) flags = (unsigned char) fgetc(in_file); /* Ignore time stamp(4), extra flags(1), OS type(1) */ - fseek(in_file, 6, SEEK_CUR); + for (i = 0; i < 6; i++) + fgetc(in_file); if ((flags & extra_field) != 0) { - fseek(in_file, (size_t) fgetc(in_file) + ((size_t)fgetc(in_file) << 8), SEEK_CUR); + size_t extra; + extra = fgetc(in_file); + extra += fgetc(in_file) << 8; + + for (i = 0; i < extra; i++) + fgetc(in_file); } /* Discard original name if any */ diff --git a/libbb/unzip.c b/libbb/unzip.c index b843ec812..9568c2870 100644 --- a/libbb/unzip.c +++ b/libbb/unzip.c @@ -904,6 +904,7 @@ extern int unzip(FILE *l_in_file, FILE *l_out_file) int method; typedef void (*sig_type) (int); int exit_code=0; /* program exit code */ + int i; in_file = l_in_file; out_file = l_out_file; @@ -949,10 +950,16 @@ extern int unzip(FILE *l_in_file, FILE *l_out_file) flags = (unsigned char) fgetc(in_file); /* Ignore time stamp(4), extra flags(1), OS type(1) */ - fseek(in_file, 6, SEEK_CUR); + for (i = 0; i < 6; i++) + fgetc(in_file); if ((flags & extra_field) != 0) { - fseek(in_file, (size_t) fgetc(in_file) + ((size_t)fgetc(in_file) << 8), SEEK_CUR); + size_t extra; + extra = fgetc(in_file); + extra += fgetc(in_file) << 8; + + for (i = 0; i < extra; i++) + fgetc(in_file); } /* Discard original name if any */ |