https://bugs.gentoo.org/322047
--- 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);
     }
--- 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().
