Skip to content

Commit 4fff815

Browse files
committed
fixup
1 parent aca5d19 commit 4fff815

2 files changed

Lines changed: 43 additions & 3 deletions

File tree

dep_checker/npm_audit.py

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -299,10 +299,9 @@ def walk(name: str, node: Dict, path_parts: Optional[list[str]] = None) -> None:
299299
if not version:
300300
return
301301
key = (name, str(version))
302-
if key in seen:
303-
return
304302
package_path_parts = [*path_parts, "node_modules", name]
305-
seen[key] = {"name": name, "version": str(version), "path": "/".join(package_path_parts)}
303+
if key not in seen:
304+
seen[key] = {"name": name, "version": str(version), "path": "/".join(package_path_parts)}
306305
for child_name, child in (node.get("dependencies") or {}).items():
307306
if isinstance(child, dict):
308307
walk(child_name, child, package_path_parts)

dep_checker/test_npm_audit.py

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -698,6 +698,46 @@ def test_normalize_version_range() -> None:
698698
assert checker.normalize_version_range(">= 1.0.0, < 2.0.0") == ">= 1.0.0, < 2.0.0"
699699

700700

701+
def test_get_installed_bundle_packages_traverses_duplicate_parent_subtrees() -> None:
702+
with tempfile.TemporaryDirectory() as temp_dir:
703+
package_dir = Path(temp_dir) / "deps" / "npm"
704+
write_package_json(
705+
package_dir / "package.json",
706+
{
707+
"name": "npm",
708+
"version": "11.18.0",
709+
"bundleDependencies": ["make-fetch-happen", "wrapper"],
710+
},
711+
)
712+
713+
checker = NPMAuditChecker(Path(temp_dir), timeout=60)
714+
packages = checker.get_installed_bundle_packages(
715+
package_dir,
716+
{
717+
"dependencies": {
718+
"wrapper": {
719+
"version": "1.0.0",
720+
"dependencies": {
721+
"make-fetch-happen": {
722+
"version": "15.0.6"
723+
}
724+
},
725+
},
726+
"make-fetch-happen": {
727+
"version": "15.0.6",
728+
"dependencies": {
729+
"ip-address": {"version": "10.2.0"}
730+
},
731+
},
732+
}
733+
},
734+
)
735+
package_map = {pkg["name"]: pkg for pkg in packages}
736+
737+
assert package_map["make-fetch-happen"]["path"] == "node_modules/wrapper/node_modules/make-fetch-happen"
738+
assert package_map["ip-address"]["path"] == "node_modules/make-fetch-happen/node_modules/ip-address"
739+
740+
701741
def test_get_installed_bundle_packages_accepts_boolean_bundle_dependencies() -> None:
702742
with tempfile.TemporaryDirectory() as temp_dir:
703743
package_dir = Path(temp_dir) / "deps" / "npm"
@@ -808,6 +848,7 @@ def test_npm_audit_basic() -> None:
808848
test_parse_audit_results_normalizes_ids()
809849
test_preferred_advisory_id()
810850
test_normalize_version_range()
851+
test_get_installed_bundle_packages_traverses_duplicate_parent_subtrees()
811852
test_get_installed_bundle_packages_accepts_boolean_bundle_dependencies()
812853
test_npm_cli_uses_installed_tree()
813854

0 commit comments

Comments
 (0)