@@ -248,7 +248,8 @@ async def progress(current, total):
248248 directory = self .PARENT_DIR / (directory or DEFAULT_DOWNLOAD_DIR )
249249
250250 os .makedirs (directory , exist_ok = True ) if not in_memory else None
251- temp_file_path = os .path .abspath (re .sub ("\\ \\ " , "/" , os .path .join (directory , file_name )))
251+ mcfn = re .sub ("\\ \\ " , "/" , os .path .join (directory , file_name ))
252+ temp_file_path = os .path .abspath (mcfn )
252253
253254 with open (temp_file_path , "wb" ) as file :
254255 file .write (thumb .getbuffer ())
@@ -269,6 +270,16 @@ async def progress(current, total):
269270 mime_type = getattr (media , "mime_type" , "" )
270271 date = getattr (media , "date" , None )
271272
273+ # CWE-22: Path Traversal: sanitize file name
274+ if media_file_name :
275+ # Remove any path components, keeping only the basename
276+ media_file_name = os .path .basename (media_file_name )
277+ # Remove null bytes which could cause issues
278+ media_file_name = media_file_name .replace ("\x00 " , "" )
279+ # Handle edge cases
280+ if not media_file_name or media_file_name in ("." , ".." ):
281+ media_file_name = ""
282+
272283 directory , file_name = os .path .split (file_name )
273284 # TODO
274285 file_name = file_name or media_file_name or ""
0 commit comments