import json
import sys
LLVM_EXCEPTION_CRATES = {
"cc",
"compiler_builtins",
}
LLVM_EXCEPTION_LICENSES = {
"apache-2.0 WITH llvm-exception",
"Apache-2.0 WITH LLVM-exception",
}
def is_false_positive(pkg: str, license_id: str, issue_type: str = "") -> bool:
if license_id in LLVM_EXCEPTION_LICENSES:
return True
if pkg == "r-efi" and license_id in ("LGPL-2.1-or-later", "LGPL-2.1+"):
return True
return False
def extract_package(issue: dict) -> str:
rev = issue.get("revisionId", "")
if rev:
if "+" in rev:
rev = rev.split("+", 1)[1]
if "$" in rev:
rev = rev.rsplit("$", 1)[0]
return rev
return issue.get("package", "") or issue.get("name", "") or ""
def main() -> int:
if len(sys.argv) < 2:
print("Usage: fossa-filter.py <fossa-results.json>", file=sys.stderr)
return 2
with open(sys.argv[1]) as f:
data = json.load(f)
if isinstance(data, list):
issues = data
else:
issues = data.get("issues", data.get("issue", []))
if not isinstance(issues, list):
issues = []
real_issues = []
filtered_count = 0
for issue in issues:
pkg = extract_package(issue)
lic = issue.get("license", "") or issue.get("licenseId", "") or ""
itype = issue.get("type", "") or issue.get("issueType", "") or ""
if is_false_positive(pkg, lic, itype):
filtered_count += 1
continue
real_issues.append(issue)
if real_issues:
print(f"FAIL: {len(real_issues)} genuine issue(s) after filtering "
f"{filtered_count} known false positives:")
for r in real_issues:
pkg = extract_package(r)
lic = r.get("license", "") or r.get("licenseId", "?")
itype = r.get("type", "") or r.get("issueType", "?")
print(f" - {pkg} {lic} ({itype})")
return 1
print(f"OK: All {filtered_count} issue(s) are documented false positives.")
return 0
if __name__ == "__main__":
sys.exit(main())