fix(system-reset): address code review feedback
- Add path traversal guard in reimport file copy loop - Improve error log message context for table wipe failures - Use conditional role=alert/status on result banner for accessibility - Make test assertions more specific (exact status codes) - Rename ambiguous view test Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com>
This commit is contained in:
@@ -168,7 +168,7 @@ def _wipe_database(db: Session) -> dict[str, int]:
|
||||
result[table_name] = count
|
||||
logger.info("Wiped %d rows from %s", count, table_name)
|
||||
except Exception:
|
||||
logger.exception("Failed to wipe table %s", table_name)
|
||||
logger.exception("Failed to wipe table %s during system reset", table_name)
|
||||
db.rollback()
|
||||
raise
|
||||
|
||||
@@ -220,6 +220,12 @@ def perform_reset_and_reimport(db: Session) -> dict:
|
||||
if original_dir.is_dir():
|
||||
for entry in original_dir.iterdir():
|
||||
if entry.is_file():
|
||||
# Validate the resolved path stays within original_dir (path traversal guard)
|
||||
try:
|
||||
entry.resolve().relative_to(original_dir.resolve())
|
||||
except ValueError:
|
||||
logger.warning("Skipping file outside original dir: %s", entry)
|
||||
continue
|
||||
dest = reimport_dir / entry.name
|
||||
# Avoid overwriting: append counter if name clash
|
||||
if dest.exists():
|
||||
|
||||
Reference in New Issue
Block a user