Skip to content

Commit 3243699

Browse files
committed
Fix tarfile FilterError handling to skip member extraction
In `tarfile` library, FilterError with error_level set to 0 correctly logged a debugging message but did not properly skip extraction of a member. Updates filter functions to return None when a FilterError is seen, as stated in docs.
1 parent 9cdf05b commit 3243699

File tree

1 file changed

+18
-8
lines changed

1 file changed

+18
-8
lines changed

Lib/tarfile.py

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -817,16 +817,26 @@ def fully_trusted_filter(member, dest_path):
817817
return member
818818

819819
def tar_filter(member, dest_path):
820-
new_attrs = _get_filtered_attrs(member, dest_path, False)
821-
if new_attrs:
822-
return member.replace(**new_attrs, deep=False)
823-
return member
820+
try:
821+
new_attrs = _get_filtered_attrs(member, dest_path, False)
822+
if new_attrs:
823+
member = member.replace(**new_attrs, deep=False)
824+
except FilterError:
825+
member = None
826+
raise
827+
finally:
828+
return member
824829

825830
def data_filter(member, dest_path):
826-
new_attrs = _get_filtered_attrs(member, dest_path, True)
827-
if new_attrs:
828-
return member.replace(**new_attrs, deep=False)
829-
return member
831+
try:
832+
new_attrs = _get_filtered_attrs(member, dest_path, True)
833+
if new_attrs:
834+
member = member.replace(**new_attrs, deep=False)
835+
except FilterError:
836+
member = None
837+
raise
838+
finally:
839+
return member
830840

831841
_NAMED_FILTERS = {
832842
"fully_trusted": fully_trusted_filter,

0 commit comments

Comments
 (0)