]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Merge pull request #2740 from dunhor/gnutar_longpath_unicode
authorTim Kientzle <kientzle@acm.org>
Sat, 4 Oct 2025 03:43:21 +0000 (20:43 -0700)
committerMartin Matuska <martin@matuska.de>
Sat, 11 Oct 2025 20:07:36 +0000 (22:07 +0200)
Check WCS pathname in header_gnutar before overwriting

(cherry picked from commit fda50c79ba9fb02dbdfda3f60e4fd3ef399e738f)

libarchive/archive_read_support_format_tar.c

index cb5344d6052616ff7ac651348b06aeb82b69ff2f..37fdd2ce7fbca2d1bebf4eb0a58d3b07a23fe216 100644 (file)
@@ -2940,7 +2940,9 @@ header_gnutar(struct archive_read *a, struct tar *tar,
        /* Copy filename over (to ensure null termination). */
        header = (const struct archive_entry_header_gnutar *)h;
        const char *existing_pathname = archive_entry_pathname(entry);
-       if (existing_pathname == NULL || existing_pathname[0] == '\0') {
+       const wchar_t *existing_wcs_pathname = archive_entry_pathname_w(entry);
+       if ((existing_pathname == NULL || existing_pathname[0] == '\0')
+           && (existing_wcs_pathname == NULL || existing_wcs_pathname[0] == L'\0')) {
                if (archive_entry_copy_pathname_l(entry,
                    header->name, sizeof(header->name), tar->sconv) != 0) {
                        err = set_conversion_failed_error(a, tar->sconv, "Pathname");