diff --git a/libarchive-3.6.1-Better-pathname-portability.patch b/libarchive-3.6.1-Better-pathname-portability.patch new file mode 100644 index 0000000..1a56864 --- /dev/null +++ b/libarchive-3.6.1-Better-pathname-portability.patch @@ -0,0 +1,44 @@ +From d6248d2640efe3e40a1a9c0bb7bd8903f6beef98 Mon Sep 17 00:00:00 2001 +From: John Reiser +Date: Fri, 26 Aug 2022 09:51:19 -0700 +Subject: [PATCH] archive_entry_pathname() tries UTF-8 if MBS returns EILSEQ + +For better pathname portability across OS, in particular Windows to Linux. +Original bug: unrar in https://bugzilla.redhat.com/show_bug.cgi?id=2120926 + modified: libarchive/archive_entry.c +--- + libarchive/archive_entry.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/libarchive/archive_entry.c b/libarchive/archive_entry.c +index ca7a4bdb5..ae6dc3336 100644 +--- a/libarchive/archive_entry.c ++++ b/libarchive/archive_entry.c +@@ -568,6 +568,13 @@ archive_entry_nlink(struct archive_entry *entry) + return (entry->ae_stat.aest_nlink); + } + ++/* Instead, our caller could have chosen a specific encoding ++ * (archive_mstring_get_mbs, archive_mstring_get_utf8, ++ * archive_mstring_get_wcs). So we should try multiple ++ * encodings. Try mbs first because of history, even though ++ * utf8 might be better for pathname portability. ++ * Also omit wcs because of type mismatch (char * versus wchar *) ++ */ + const char * + archive_entry_pathname(struct archive_entry *entry) + { +@@ -575,6 +582,13 @@ archive_entry_pathname(struct archive_entry *entry) + if (archive_mstring_get_mbs( + entry->archive, &entry->ae_pathname, &p) == 0) + return (p); ++#if HAVE_EILSEQ /*{*/ ++ if (errno == EILSEQ) { ++ if (archive_mstring_get_utf8( ++ entry->archive, &entry->ae_pathname, &p) == 0) ++ return (p); ++ } ++#endif /*}*/ + if (errno == ENOMEM) + __archive_errx(1, "No memory"); + return (NULL); diff --git a/libarchive.spec b/libarchive.spec index 1a9fe1a..eb6ca1a 100644 --- a/libarchive.spec +++ b/libarchive.spec @@ -2,7 +2,7 @@ Name: libarchive Version: 3.6.1 -Release: 4%{?dist} +Release: 5%{?dist} Summary: A library for handling streaming archive formats License: BSD @@ -41,6 +41,10 @@ Patch0001: 0001-Drop-rmd160-from-OpenSSL.patch # Source: https://github.com/libarchive/libarchive/commit/fd180c36036df7181a64931264732a10ad8cd024 Patch2: %{name}-3.6.1-Fix-CVE-2022-36227.patch +# For better pathname portability across OS, in particular Windows to Linux +# archive_entry_pathname() tries UTF-8 if MBS returns EILSEQ +# Source: https://github.com/libarchive/libarchive/commit/06a4b1018ee843cd491f6ff92813e67962fa0335 +Patch3: %{name}-3.6.1-Better-pathname-portability.patch %description Libarchive is a programming library that can create and read several different @@ -225,6 +229,10 @@ run_testsuite %changelog +* Wed Feb 08 2023 Davide Cavalca - 3.6.1-5 +- Backport upstream PR#1772 for better pathname portability across OS + Resolves: #2136961 + * Thu Jan 19 2023 Fedora Release Engineering - 3.6.1-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild