Skip to content

Commit 62a7d45

Browse files
committed
minor changes
1 parent a01095d commit 62a7d45

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

pmultiqc/modules/common/file_utils.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,13 @@ def extract_zip(file_path: str, extract_to: str) -> None:
5858

5959
# Security: Check for path traversal in zip entries
6060
for member in zip_ref.namelist():
61-
# Check for explicit path traversal attempts first
62-
if ".." in member or member.startswith("/"):
61+
# Check for explicit path traversal attempts (../ or ..\ patterns)
62+
# Allow filenames containing ".." as a substring (e.g., "file..name.txt")
63+
if "../" in member or "..\\" in member or member.startswith("../") or member.startswith("..\\"):
6364
raise ValueError(f"Invalid path in zip file: {member}")
65+
# Check for absolute paths
66+
if member.startswith("/") or (os.name == "nt" and len(member) > 1 and member[1] == ":"):
67+
raise ValueError(f"Invalid absolute path in zip file: {member}")
6468

6569
# Normalize the member path (remove leading slashes and normalize)
6670
member_normalized = os.path.normpath(member.lstrip("/"))
@@ -98,9 +102,13 @@ def extract_tar(file_path: str, extract_to: str) -> None:
98102

99103
# Security: Check for path traversal in tar entries
100104
for member in tar_ref.getmembers():
101-
# Check for explicit path traversal attempts first
102-
if ".." in member.name or member.name.startswith("/"):
105+
# Check for explicit path traversal attempts (../ or ..\ patterns)
106+
# Allow filenames containing ".." as a substring (e.g., "file..name.txt")
107+
if "../" in member.name or "..\\" in member.name or member.name.startswith("../") or member.name.startswith("..\\"):
103108
raise ValueError(f"Invalid path in tar file: {member.name}")
109+
# Check for absolute paths
110+
if member.name.startswith("/") or (os.name == "nt" and len(member.name) > 1 and member.name[1] == ":"):
111+
raise ValueError(f"Invalid absolute path in tar file: {member.name}")
104112

105113
# Normalize the member path (remove leading slashes and normalize)
106114
member_normalized = os.path.normpath(member.name.lstrip("/"))

0 commit comments

Comments
 (0)