Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,9 @@ LICENSE text eol=lf
*.dmg binary
*.jmx binary
*.har binary
*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
# LFS disabled — git-lfs not installed on all dev machines
# *.png filter=lfs diff=lfs merge=lfs -text
# *.jpg filter=lfs diff=lfs merge=lfs -text

# linguist(GitHub 语言识别)
05-代码示例/* linguist-language=Python
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -200,3 +200,6 @@ archive/
# ===== runtime 运行时产物(用户数据,不入仓)=====
runtime/workspace/
runtime/web/tsconfig.tsbuildinfo

# ===== 安全:可能含敏感数据的文件 =====
*.har
2 changes: 1 addition & 1 deletion runtime/orchestrator/metrics/parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def parse_jmeter_jtl(csv_text: str) -> dict[str, Any]:
try:
elapsed_values.append(int(fields[elapsed_idx]))
except ValueError:
continue
pass # corrupt elapsed, still check success below
if fields[success_idx].strip().lower() != "true":
failures += 1

Expand Down
11 changes: 10 additions & 1 deletion runtime/orchestrator/workflows/test_coordinator.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
)

# Paths relative to project root
_PROJECT_ROOT = Path(__file__).resolve().parents[2]
_PROJECT_ROOT = Path(__file__).resolve().parents[3]
_WORKSPACE = _PROJECT_ROOT / "workspace"


Expand Down Expand Up @@ -74,6 +74,15 @@ def run(self, target: str) -> PipelineResult:
console.print(f"Target: {target[:100]}{'...' if len(target) > 100 else ''}")
console.print()

# Validate target path (prevent traversal)
if target and not target.startswith(("http://", "https://")):
resolved = Path(target).resolve()
if not str(resolved).startswith(str(_PROJECT_ROOT.resolve())):
result.ok = False
result.aborted_at = "preflight"
result.summary = f"Target outside workspace: {target}"
return result

# Phase 0: Pre-flight
missing = self._preflight()
if missing:
Expand Down