From a1a06d023ebd4f92629d969b9e045bb4f1f882b9 Mon Sep 17 00:00:00 2001
From: jvoisin <julien.voisin@dustri.org>
Date: Tue, 18 Sep 2018 22:44:21 +0200
Subject: [PATCH] Insert archive members in lexicographic order

---
 libmat2/archive.py | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/libmat2/archive.py b/libmat2/archive.py
index 2808b9f..7b9f335 100644
--- a/libmat2/archive.py
+++ b/libmat2/archive.py
@@ -74,7 +74,9 @@ class ArchiveBasedAbstractParser(abstract.AbstractParser):
             temp_folder = tempfile.mkdtemp()
             abort = False
 
-            for item in zin.infolist():
+            # Since files order is a fingerprint factor,
+            # we're iterating (and thus inserting) them in lexicographic order.
+            for item in sorted(zin.infolist(), key=lambda z: z.filename):
                 if item.filename[-1] == '/':  # `is_dir` is added in Python3.6
                     continue  # don't keep empty folders
 
@@ -92,8 +94,7 @@ class ArchiveBasedAbstractParser(abstract.AbstractParser):
                     pass
                 elif any(map(lambda r: r.search(item.filename), self.files_to_omit)):
                     continue
-                else:
-                    # supported files that we want to clean then add
+                else: # supported files that we want to first clean, then add
                     tmp_parser, mtype = parser_factory.get_parser(full_path)  # type: ignore
                     if not tmp_parser:
                         if self.unknown_member_policy == UnknownMemberPolicy.OMIT:
-- 
GitLab