T09 · Insecure Skill Coding Practices
- Location
scripts/report_manager.py:36- Finding
Path Traversal Through Unvalidated Report Filename Components
- Content
View full analysis
Dict[str, object]: root = os.path.abspath(workdir) ticker_upper = ticker.upper() reports_dir = canonical_reports_dir(root) os.makedirs(reports_dir, exist_ok=True) reports = discover_reports(root, ticker_upper) history_files = [r.path for r in reports[:history_limit]] legacy_files = [r.path for r in reports if not r.in_canonical_dir] base_name = f"{run_date}-{ticker_upper}-analysis.md" base_path = os.path.join(reports_dir, base_name) base_exists = os.path.exists(base_path) requires_user_choice = False selected_mode = "new_file" selected_path = base_path if base_exists: if versioning == "overwrite": selected_mode = "overwrite" elif versioning == "new_version": selected_mode = "new_version" else: if unattended: selected_mode = "new_version" else: selected_mode = "new_version" requires_user_choice = True if selected_mode == "new_version": versions = _same_day_versions_in_canonical( reports, reports_dir, run_date, ticker_upper ) next_version = max(versions or [1]) + 1 selected_path = os.path.join( reports_dir, f"{run_date}-{ticker_upper}-analysis-v{next_version}.md" ) return { "ticker": ticker_upper, "workdir": root, "reports_dir": reports_dir, "base_output_file": base_path, "selected_output_file": selected_path, "selected_versioning_mode": selected_mode, "requires_user_choice": requires_user_choice ...[truncated 2510 chars]- Remediation
View remediation
