Skip to content

Commit e419ccb

Browse files
Merge pull request #4223 from meeseeksmachine/auto-backport-of-pr-4221-on-yt-4.1.x
2 parents ed43d5d + adc60f2 commit e419ccb

1 file changed

Lines changed: 20 additions & 1 deletion

File tree

yt/loaders.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1478,7 +1478,26 @@ def load_sample(
14781478
if tarfile.is_tarfile(tmp_file):
14791479
mylog.info("Untaring downloaded file to '%s'", save_dir)
14801480
with tarfile.open(tmp_file) as fh:
1481-
fh.extractall(save_dir)
1481+
1482+
def is_within_directory(directory, target):
1483+
1484+
abs_directory = os.path.abspath(directory)
1485+
abs_target = os.path.abspath(target)
1486+
1487+
prefix = os.path.commonprefix([abs_directory, abs_target])
1488+
1489+
return prefix == abs_directory
1490+
1491+
def safe_extract(tar, path=".", members=None, *, numeric_owner=False):
1492+
1493+
for member in tar.getmembers():
1494+
member_path = os.path.join(path, member.name)
1495+
if not is_within_directory(path, member_path):
1496+
raise Exception("Attempted Path Traversal in Tar File")
1497+
1498+
tar.extractall(path, members, numeric_owner=numeric_owner)
1499+
1500+
safe_extract(fh, save_dir)
14821501
os.remove(tmp_file)
14831502
else:
14841503
os.replace(tmp_file, os.path.join(save_dir, fn))

0 commit comments

Comments
 (0)