diff --git a/django/utils/archive.py b/django/utils/archive.py index 90b72593a97..6a47b005025 100644 --- a/django/utils/archive.py +++ b/django/utils/archive.py @@ -144,7 +144,7 @@ class TarArchive(BaseArchive): # note: python<=2.5 doesn't seem to know about pax headers, filter them members = [member for member in self._archive.getmembers() if member.name != 'pax_global_header'] - leading = self.has_leading_dir(members) + leading = self.has_leading_dir(x.name for x in members) for member in members: name = member.name if leading: diff --git a/tests/utils_tests/archives/leadpath_foobar.tar b/tests/utils_tests/archives/leadpath_foobar.tar new file mode 100644 index 00000000000..3ff38d72f5f Binary files /dev/null and b/tests/utils_tests/archives/leadpath_foobar.tar differ diff --git a/tests/utils_tests/archives/leadpath_foobar.tar.bz2 b/tests/utils_tests/archives/leadpath_foobar.tar.bz2 new file mode 100644 index 00000000000..15f47ca1799 Binary files /dev/null and b/tests/utils_tests/archives/leadpath_foobar.tar.bz2 differ diff --git a/tests/utils_tests/archives/leadpath_foobar.tar.gz b/tests/utils_tests/archives/leadpath_foobar.tar.gz new file mode 100644 index 00000000000..7b5ba7eda42 Binary files /dev/null and b/tests/utils_tests/archives/leadpath_foobar.tar.gz differ diff --git a/tests/utils_tests/archives/leadpath_foobar.zip b/tests/utils_tests/archives/leadpath_foobar.zip new file mode 100644 index 00000000000..8437c1ac03e Binary files /dev/null and b/tests/utils_tests/archives/leadpath_foobar.zip differ diff --git a/tests/utils_tests/test_archive.py b/tests/utils_tests/test_archive.py index f00f25e8554..6f1b66b14b7 100644 --- a/tests/utils_tests/test_archive.py +++ b/tests/utils_tests/test_archive.py @@ -21,6 +21,7 @@ class ArchiveTester(object): self.tmpdir = tempfile.mkdtemp() self.addCleanup(shutil.rmtree, self.tmpdir) self.archive_path = os.path.join(TEST_DIR, self.archive) + self.archive_lead_path = os.path.join(TEST_DIR, "leadpath_%s" % self.archive) # Always start off in TEST_DIR. os.chdir(TEST_DIR) @@ -42,6 +43,10 @@ class ArchiveTester(object): extract(self.archive_path, self.tmpdir) self.check_files(self.tmpdir) + def test_extract_function_with_leadpath(self): + extract(self.archive_lead_path, self.tmpdir) + self.check_files(self.tmpdir) + def test_extract_function_no_to_path(self): os.chdir(self.tmpdir) extract(self.archive_path)