@@ -99,46 +99,38 @@ def clean_json(texto):
9999def load_yaml_safely (file_path ):
100100 """Load a YAML file safely with error handling and default values."""
101101 try :
102-
103- path = Path (file_path )
104-
105-
106- if '..' in path .parts :
107- logger .error (f"Path traversal attempt detected: { file_path } " )
102+ if not file_path or not isinstance (file_path , str ):
103+ logger .error ("Invalid file_path: must be a non-empty string" )
108104 return None
109105
106+ clean_path = os .path .normpath (file_path .strip ())
110107
111- resolved_path = path .resolve ()
112-
113-
114- if resolved_path .suffix .lower () not in ['.yml' , '.yaml' ]:
115- logger .error (f"Invalid file extension: { file_path } " )
108+ if '..' in clean_path :
109+ logger .error (f"Path traversal detected: { file_path } " )
116110 return None
117111
118-
119- if not resolved_path .exists ():
120- logger .error (f"YAML file not found: { resolved_path } " )
112+ if not (clean_path .lower ().endswith ('.yml' ) or clean_path .lower ().endswith ('.yaml' )):
113+ logger .error (f"Invalid file extension: { file_path } " )
121114 return None
122115
123- if not resolved_path . is_file ( ):
124- logger .error (f"Path is not a regular file : { resolved_path } " )
116+ if not os . path . exists ( clean_path ):
117+ logger .error (f"YAML file not found : { clean_path } " )
125118 return None
126-
127- if not os .access ( resolved_path , os . R_OK ):
128- logger .error (f"No read permission for file: { resolved_path } " )
119+
120+ if not os .path . isfile ( clean_path ):
121+ logger .error (f"Path is not a regular file: { clean_path } " )
129122 return None
130123
131- file_size = resolved_path .stat ().st_size
132- max_size = 10 * 1024 * 1024
133- if file_size > max_size :
134- logger .error (f"File too large ({ file_size } bytes): { resolved_path } " )
124+ file_size = os .path .getsize (clean_path )
125+ if file_size > 10 * 1024 * 1024 : # 10MB
126+ logger .error (f"File too large ({ file_size } bytes): { clean_path } " )
135127 return None
136128
137- with open (resolved_path , 'r' , encoding = 'utf-8' ) as f :
129+ with open (clean_path , 'r' , encoding = 'utf-8' ) as f :
138130 data = yaml .safe_load (f )
139131
140132 if not data :
141- logger .error (f"Empty YAML file: { resolved_path } " )
133+ logger .error (f"Empty YAML file: { clean_path } " )
142134 return None
143135
144136 data .setdefault ('beacon_url' , '' )
0 commit comments