You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
26 lines
1.1 KiB
26 lines
1.1 KiB
diff --git a/fileio.c b/fileio.c |
|
index ba0a1d0..03fc4be 100644 |
|
--- a/fileio.c |
|
+++ b/fileio.c |
|
@@ -2006,6 +2006,7 @@ int do_string(__G__ length, option) /* return PK-type error code */ |
|
unsigned comment_bytes_left; |
|
unsigned int block_len; |
|
int error=PK_OK; |
|
+ unsigned int length2; |
|
#ifdef AMIGA |
|
char tmp_fnote[2 * AMIGA_FILENOTELEN]; /* extra room for squozen chars */ |
|
#endif |
|
@@ -2292,8 +2293,12 @@ int do_string(__G__ length, option) /* return PK-type error code */ |
|
seek_zipf(__G__ G.cur_zipfile_bufstart - G.extra_bytes + |
|
(G.inptr-G.inbuf) + length); |
|
} else { |
|
- if (readbuf(__G__ (char *)G.extra_field, length) == 0) |
|
+ if ((length2 = readbuf(__G__ (char *)G.extra_field, length)) == 0) |
|
return PK_EOF; |
|
+ if(length2 < length) { |
|
+ memset (__G__ (char *)G.extra_field+length2, 0 , length-length2); |
|
+ length = length2; |
|
+ } |
|
/* Looks like here is where extra fields are read */ |
|
getZip64Data(__G__ G.extra_field, length); |
|
#ifdef UNICODE_SUPPORT
|
|
|