]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Revert "Use proper Create OS value on Windows to fix archive charset detection (...
authorTim Kientzle <kientzle@acm.org>
Mon, 28 Oct 2024 02:34:51 +0000 (19:34 -0700)
committerGitHub <noreply@github.com>
Mon, 28 Oct 2024 02:34:51 +0000 (19:34 -0700)
Two problems are prompting this revert:

* In order to change the Create OS value to "Windows", we would need to
record other data (such as `external_attributes`) in Windows format as
well.

* Changing the Create OS value doesn't actually fix the
filename-encoding issue that originally motivated this PR

This reverts commit 755af84301adc4262722a4c88671a8d0a1c83fae.

libarchive/archive_write_set_format_zip.c

index b5409beac8b16196a16fad9496d494f35b34fe9e..1d94a6c1eed8131fb4e62b398f02eb794879c59d 100644 (file)
@@ -798,17 +798,6 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
        struct archive_string_conv *sconv = get_sconv(a, zip);
        int ret, ret2 = ARCHIVE_OK;
        mode_t type;
-#if defined(_WIN32)
-       /* On Windows use MS-DOS value as internal Windows zip archiver does
-        * Fixes charset problems like https://sourceforge.net/p/sevenzip/bugs/2463/
-        * Full set of possible create os values:
-        * https://pkwaredownloads.blob.core.windows.net/pem/APPNOTE-6.3.10.txt
-        * See "4.4.2 version made by (2 bytes)" */
-       int create_os = 0;
-#else
-       // Use UNIX value in all other cases
-       int create_os = 3;
-#endif
        int version_needed = 10;
 #define MIN_VERSION_NEEDED(x) do { if (version_needed < x) { version_needed = x; } } while (0)
 
@@ -1158,8 +1147,8 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
        ++zip->central_directory_entries;
        memset(zip->file_header, 0, 46);
        memcpy(zip->file_header, "PK\001\002", 4);
-       /* "Made by PKZip 2.0 on Unix or MS-DOS." */
-       archive_le16enc(zip->file_header + 4, create_os * 256 + version_needed);
+       /* "Made by PKZip 2.0 on Unix." */
+       archive_le16enc(zip->file_header + 4, 3 * 256 + version_needed);
        archive_le16enc(zip->file_header + 6, version_needed);
        archive_le16enc(zip->file_header + 8, zip->entry_flags);
        if (zip->entry_encryption == ENCRYPTION_WINZIP_AES128
@@ -1292,7 +1281,7 @@ archive_write_zip_header(struct archive_write *a, struct archive_entry *entry)
                e += 1;
                if (included & 1) {
                        archive_le16enc(e, /* "Version created by" */
-                           create_os * 256 + version_needed);
+                           3 * 256 + version_needed);
                        e += 2;
                }
                if (included & 2) {