diff --git a/security-review/checkers/dependency-cve.sh b/security-review/checkers/dependency-cve.sh index 2e38541..8a2a35c 100755 --- a/security-review/checkers/dependency-cve.sh +++ b/security-review/checkers/dependency-cve.sh @@ -354,6 +354,14 @@ if [ "$CANARY" -eq 1 ]; then nm="$(basename "$d")" cp -R "$d" "$FIXTURE_WORK/$nm" mv "$FIXTURE_WORK/$nm/dotgit" "$FIXTURE_WORK/$nm/.git" + # Manifests are stored as .fixture so GitHub's dependency graph / the + # dependency-review CI action does NOT parse the deliberately-vulnerable canary + # pins as real project dependencies. Restore their real names in the materialized + # work area so the checker's per-ecosystem parsers dispatch correctly (same + # committable-without-side-effects rationale as the dotgit/ rename above). + while IFS= read -r ff; do + [ -n "$ff" ] && mv "$ff" "${ff%.fixture}" + done < <(find "$FIXTURE_WORK/$nm" -name '*.fixture' -not -path '*/.git/*' 2>/dev/null) REPO_NAMES+=( "$nm" ); REPO_DIR["$nm"]="$FIXTURE_WORK/$nm" done elif [ -n "$TARGETS_OVERRIDE" ]; then diff --git a/security-review/checkers/fixtures/dependency-cve/README.md b/security-review/checkers/fixtures/dependency-cve/README.md index 20dabb1..54d8822 100644 --- a/security-review/checkers/fixtures/dependency-cve/README.md +++ b/security-review/checkers/fixtures/dependency-cve/README.md @@ -32,3 +32,11 @@ regression in either parser is caught. When you add/remove a parser, a fixture, or an advisory entry, update the fixture(s), `osv-advisories.json`, and `EXPECTED_VULN_COUNT` in the same commit (the canary edit is itself caught on the next run — design §6.4). + +**Manifest naming:** the dependency manifests are stored with a `.fixture` suffix +(`requirements.txt.fixture`, `package-lock.json.fixture`) so GitHub's dependency graph / +the `dependency-review` CI action does NOT parse the deliberately-vulnerable canary pins as +real project dependencies (which would fail the PR gate). The checker's `--canary` +materialization strips the `.fixture` suffix in its temp work area before scanning, so the +per-ecosystem parsers still dispatch on the real names. Keep this suffix on any new +manifest fixture. diff --git a/security-review/checkers/fixtures/dependency-cve/clean-repo/requirements.txt b/security-review/checkers/fixtures/dependency-cve/clean-repo/requirements.txt.fixture similarity index 100% rename from security-review/checkers/fixtures/dependency-cve/clean-repo/requirements.txt rename to security-review/checkers/fixtures/dependency-cve/clean-repo/requirements.txt.fixture diff --git a/security-review/checkers/fixtures/dependency-cve/vuln-js-repo/package-lock.json b/security-review/checkers/fixtures/dependency-cve/vuln-js-repo/package-lock.json.fixture similarity index 100% rename from security-review/checkers/fixtures/dependency-cve/vuln-js-repo/package-lock.json rename to security-review/checkers/fixtures/dependency-cve/vuln-js-repo/package-lock.json.fixture diff --git a/security-review/checkers/fixtures/dependency-cve/vuln-py-repo/requirements.txt b/security-review/checkers/fixtures/dependency-cve/vuln-py-repo/requirements.txt.fixture similarity index 100% rename from security-review/checkers/fixtures/dependency-cve/vuln-py-repo/requirements.txt rename to security-review/checkers/fixtures/dependency-cve/vuln-py-repo/requirements.txt.fixture