fix: Fix security vuln with file upload (#2067)

This commit is contained in:
Matthew Zhou
2024-11-19 17:07:04 -08:00
committed by GitHub
parent 0c20ec3582
commit 85d558367f
11 changed files with 148 additions and 11 deletions

66
tests/test_utils.py Normal file
View File

@@ -0,0 +1,66 @@
import pytest
from letta.constants import MAX_FILENAME_LENGTH
from letta.utils import sanitize_filename
def test_valid_filename():
filename = "valid_filename.txt"
sanitized = sanitize_filename(filename)
assert sanitized.startswith("valid_filename_")
assert sanitized.endswith(".txt")
def test_filename_with_special_characters():
filename = "invalid:/<>?*ƒfilename.txt"
sanitized = sanitize_filename(filename)
assert sanitized.startswith("ƒfilename_")
assert sanitized.endswith(".txt")
def test_null_byte_in_filename():
filename = "valid\0filename.txt"
sanitized = sanitize_filename(filename)
assert "\0" not in sanitized
assert sanitized.startswith("validfilename_")
assert sanitized.endswith(".txt")
def test_path_traversal_characters():
filename = "../../etc/passwd"
sanitized = sanitize_filename(filename)
assert sanitized.startswith("passwd_")
assert len(sanitized) <= MAX_FILENAME_LENGTH
def test_empty_filename():
sanitized = sanitize_filename("")
assert sanitized.startswith("_")
def test_dot_as_filename():
with pytest.raises(ValueError, match="Invalid filename"):
sanitize_filename(".")
def test_dotdot_as_filename():
with pytest.raises(ValueError, match="Invalid filename"):
sanitize_filename("..")
def test_long_filename():
filename = "a" * (MAX_FILENAME_LENGTH + 10) + ".txt"
sanitized = sanitize_filename(filename)
assert len(sanitized) <= MAX_FILENAME_LENGTH
assert sanitized.endswith(".txt")
def test_unique_filenames():
filename = "duplicate.txt"
sanitized1 = sanitize_filename(filename)
sanitized2 = sanitize_filename(filename)
assert sanitized1 != sanitized2
assert sanitized1.startswith("duplicate_")
assert sanitized2.startswith("duplicate_")
assert sanitized1.endswith(".txt")
assert sanitized2.endswith(".txt")