=== VALID CASES === pipeline_2026_sms.pdf => MATCH upload_123.jpg => MATCH docreq_456.docx => MATCH file_name-with-dash.txt => MATCH === INVALID CASES (path traversal) === ../../../etc/passwd => BLOCKED file..name.pdf => MATCH (PROBLEM!) ..pdf => MATCH (PROBLEM!) file.pdf. => BLOCKED .hidden.txt => MATCH (PROBLEM!) === DOUBLE-DOT CHECK === ../file.pdf => strpos('..') = FOUND (blocked) file..pdf => strpos('..') = FOUND (blocked)