From c021c80b08fe999be9d53775882c92680534b72d Mon Sep 17 00:00:00 2001 From: Patric Stout Date: Sun, 21 Jan 2024 19:06:58 +0100 Subject: [PATCH] Fix #6377: two tarballs with the same folder in them were considered as one (#11855) (cherry picked from commit 0c81579363b442b470361340401e2cd629715b78) --- src/fileio.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/fileio.cpp b/src/fileio.cpp index 2a4335ba5e..0272fe10d5 100644 --- a/src/fileio.cpp +++ b/src/fileio.cpp @@ -525,6 +525,9 @@ bool TarScanner::AddFile(const std::string &filename, size_t basepath_length, co _tar_list[this->subdir][filename] = std::string{}; + std::string filename_base = filename; + SimplifyFileName(filename_base.data()); + TarLinkList links; ///< Temporary list to collect links TarHeader th; @@ -583,7 +586,7 @@ bool TarScanner::AddFile(const std::string &filename, size_t basepath_length, co SimplifyFileName(name); DEBUG(misc, 6, "Found file in tar: %s (" PRINTF_SIZE " bytes, " PRINTF_SIZE " offset)", name, skip, pos); - if (_tar_filelist[this->subdir].insert(TarFileList::value_type(name, entry)).second) num++; + if (_tar_filelist[this->subdir].insert(TarFileList::value_type(filename_base + PATHSEPCHAR + name, entry)).second) num++; break; } @@ -653,7 +656,7 @@ bool TarScanner::AddFile(const std::string &filename, size_t basepath_length, co /* Store links in temporary list */ DEBUG(misc, 6, "Found link in tar: %s -> %s", name, dest); - links.insert(TarLinkList::value_type(name, dest)); + links.insert(TarLinkList::value_type(filename_base + PATHSEPCHAR + name, filename_base + PATHSEPCHAR + dest)); break; }