Safeguard
Security Guides•

Does reachability analysis need the advisory to name the function?

Function-level reachability needs to know which function is vulnerable. Learn what happens when an advisory does not say, and how to fill the gap.

Safeguard Security Team
3 min read

Yes, for function-level results. A tool can only ask whether your code reaches the vulnerable function if it knows which function that is. When an advisory names only a package and a version range, the tool falls back to package-level answers, such as "imported", unless someone adds the function detail.

Two inputs, not one

Reachability needs two pieces:

  1. Your code's call graph, built from your source and dependencies.
  2. The vulnerable location, the function or symbol an advisory points to.

The first you control. The second comes from advisory data, which varies in quality. The Go team's tooling illustrates the benefit when the data exists: the govulncheck documentation describes narrowing reports by analysing source code or a binary's symbol table, which relies on the vulnerability database identifying affected symbols. The tutorial output separates calls to a vulnerable function from mere imports of an affected package.

What you see when the detail is missing

Advisory detailWhat a tool can say
Package and version range onlyPresent or imported, not called or uncalled
Package, version, and affected function or moduleFunction-level reachable or not reachable
Free text description mentioning a functionNeeds a person or model to extract it, with care

That is why two tools can disagree on the same finding. One may have function data for the advisory and the other may not.

How to fill the gap

  1. Read the advisory text. Descriptions often name the parser, the option or the endpoint involved.
  2. Check the fix commit. The changed functions in the patch point to the vulnerable code. Verify by reading the diff, not by trusting a summary.
  3. Map to your use. Search your code for calls into the named function or the feature it belongs to.
  4. Record what you did. In your ticket, note whether the function was named by the advisory or inferred from the patch.
  5. Stay cautious. An inferred function can be incomplete, so use package-level treatment unless you are confident.

Be careful with extracted data

If a tool uses a language model to extract the vulnerable function from advisory text, treat the extraction as a hint. Spot check a sample against the patch. A wrong function name produces a confident wrong answer.

Why it matters for audits

A statement that says "not reachable" should say whether it is based on a named function or on a heuristic. Reviewers can then judge how much weight to give it.

Safeguard includes reachability analysis alongside SBOM and dependency scanning, and you can run a free scan at gold.safeguard.sh/scan to see the output on your own repository.

Quick check

What if the advisory names no function?

Use package-level handling by default, or derive the function from the fix commit and note that it is inferred.

Why do tools disagree on the same CVE?

They may use different advisory data, different call graph assumptions or different entry points.

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.