@@ -50,3 +50,33 @@ def safemembers(members):
5050
5151tar = tarfile .open (unsafe_filename_tar )
5252tar .extractall (members = safemembers (tar ))
53+
54+
55+ # Wrong sanitizer (is missing not)
56+ tar = tarfile .open (unsafe_filename_tar )
57+ for entry in tar :
58+ if os .path .isabs (entry .name ) or ".." in entry .name :
59+ tar .extract (entry , "/tmp/unpack/" )
60+
61+
62+ # OK Sanitized using not
63+ tar = tarfile .open (unsafe_filename_tar )
64+ for entry in tar :
65+ if not (os .path .isabs (entry .name ) or ".." in entry .name ):
66+ tar .extract (entry , "/tmp/unpack/" )
67+
68+ # The following two variants are included by purpose, since by default there is a
69+ # difference in handling `not x` and `not (x or False)` when overriding
70+ # Sanitizer.sanitizingEdge. We want to ensure we handle both consistently.
71+
72+ # Not reported, although vulnerable to '..'
73+ tar = tarfile .open (unsafe_filename_tar )
74+ for entry in tar :
75+ if not (os .path .isabs (entry .name ) or False ):
76+ tar .extract (entry , "/tmp/unpack/" )
77+
78+ # Not reported, although vulnerable to '..'
79+ tar = tarfile .open (unsafe_filename_tar )
80+ for entry in tar :
81+ if not os .path .isabs (entry .name ):
82+ tar .extract (entry , "/tmp/unpack/" )
0 commit comments