| diff -dupr zip30-old/fileio.c zip30/fileio.c |
| --- a/fileio.c |
| +++ b/fileio.c |
| @@ -3502,7 +3502,7 @@ zwchar *local_to_wide_string(local_strin |
| if ((wc_string = (wchar_t *)malloc((wsize + 1) * sizeof(wchar_t))) == NULL) { |
| ZIPERR(ZE_MEM, "local_to_wide_string"); |
| } |
| - wsize = mbstowcs(wc_string, local_string, strlen(local_string) + 1); |
| + wsize = mbstowcs(wc_string, local_string, wsize + 1); |
| wc_string[wsize] = (wchar_t) 0; |
| |
| /* in case wchar_t is not zwchar */ |
| diff -dupr zip30-old/zipfile.c zip30/zipfile.c |
| --- a/zipfile.c |
| +++ b/zipfile.c |
| @@ -5406,7 +5406,9 @@ int putlocal(z, rewrite) |
| if (z->flg & UTF8_BIT) { |
| /* If this flag is set, then restore UTF-8 as path name */ |
| use_uname = 1; |
| + tempzn -= nam; |
| nam = strlen(z->uname); |
| + tempzn += nam; |
| } else { |
| /* use extra field */ |
| add_Unicode_Path_local_extra_field(z); |
| @@ -5647,7 +5650,9 @@ int putcentral(z) |
| if (z->flg & UTF8_BIT) { |
| /* If this flag is set, then restore UTF-8 as path name */ |
| use_uname = 1; |
| + tempzn -= nam; |
| nam = strlen(z->uname); |
| + tempzn += nam; |
| } else { |
| add_Unicode_Path_cen_extra_field(z); |
| } |
| diff -dupr zip30/zipnote.c zip30/zipnote.c |
| --- a/zipnote.c |
| +++ b/zipnote.c |
| @@ -575,6 +575,13 @@ char **argv; /* command line |
| strcpy(z->iname, a+2); |
| #endif |
| |
| +#ifdef UNICODE_SUPPORT |
| +#define UTF8_BIT (1 << 11) |
| + if (using_utf8) { |
| + z->uname = z->iname; |
| + } |
| +#endif |
| + |
| /* |
| * Don't update z->nam here, we need the old value a little later..... |
| * The update is handled in zipcopy(). |
| @@ -661,7 +668,7 @@ char **argv; /* command line |
| if ((r = zipcopy(z)) != ZE_OK) |
| ziperr(r, "was copying an entry"); |
| } |
| - fclose(x); |
| + fclose(in_file); |
| |
| /* Write central directory and end of central directory with new comments */ |
| if ((c = zftello(y)) == (zoff_t)-1) /* get start of central */ |