Safeguard
Security Guides•

Why did my scanner flag a package I do not use?

Usually the package is transitive, the match is name based, or your code never calls the flawed function. Here is how to tell which, and what to do.

Safeguard Security Team
3 min read

A scanner flags a package you do not use for one of three reasons. It is a transitive dependency of something you do use, the match was made by name and picked the wrong product, or the package is present but your code never calls the vulnerable function. Each has a different fix.

Definitions

Transitive dependency. A package pulled in by another package.

Name based match. Identifying a component by a product style name, such as a CPE, rather than exact ecosystem coordinates.

Reachability. Whether your code can call the vulnerable function.

Cause 1: it is transitive

Run your tree command and look for the package. If it shows up under a direct dependency, you use it, indirectly. Upgrade the closest parent. See the companion post on tracing which package pulls it in.

Cause 2: the match is wrong

OWASP Dependency-Check works by collecting evidence about a dependency to infer a CPE, then listing CVEs for it. When evidence is thin, the guess can point to the wrong product or version. Check the advisory text against the artifact: same vendor, same module, same version range?

If it is wrong, suppress the finding with a written reason, scoped to that component, so it does not return every scan.

Cause 3: present but not called

The Go tutorial shows this split well. govulncheck reports an affected section where call stacks show your code reaching the flawed function, and an informational section where the module is imported but no call stack reaches the vulnerability, noting you may not need to take action.

Other ecosystems rely on separate reachability analysis to make the same call.

Decision table

EvidenceLikely causeAction
Package appears in the tree under a parentTransitiveUpgrade the parent
Advisory names a different productWrong matchSuppress with reason
No code path to the flawed functionNot reachableLower priority, schedule the upgrade
Code path existsReal exposureFix now

Steps

  1. Find the package in the dependency tree.
  2. Read the advisory for the affected component and version range.
  3. Check whether your code calls the affected function or feature.
  4. Decide: fix, suppress with reason, or defer with a review date.
  5. Record the decision so the next person does not repeat the work.

Try it yourself

Click through it at your own pace, or open it full screen.

Compare the findings before and after reachability filtering.

Quick check

Can I just ignore findings in code I never call?

You can lower their priority, but still plan the upgrade. Code paths change, and the next developer may call that function.

Is suppressing a finding risky?

Just if you do it without a reason or a review date. Document both.

Safeguard includes reachability analysis, so findings that your code reaches can be ranked above those it does not. A free scan will show the split.

Sources

Last reviewed: 19 October 2026.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.