Skip to content

Create pipeline for symbol reachability - #2151

Open
ziadhany wants to merge 47 commits into
aboutcode-org:mainfrom
ziadhany:add-symbol-reachability
Open

Create pipeline for symbol reachability#2151
ziadhany wants to merge 47 commits into
aboutcode-org:mainfrom
ziadhany:add-symbol-reachability

Conversation

@ziadhany

@ziadhany ziadhany commented Apr 22, 2026

Copy link
Copy Markdown
Collaborator

Issues

Changes

Add Pipeline(s) that can retrieve vulnerable / fix symbols, collect local symbols (pur2sym) and match them
Pipeline Graph:

flowchart TD
    %% Main Entry Point
    Start([collect_and_store_symbol_reachability_results]) --> GetResources[Filter candidate_resources]
    GetResources --> GroupPatches[Group fixed_in_patches by vcs_url]
    GroupPatches --> RepoLoop{For each repository}

    %% Repository Processing
    RepoLoop -->|Process Repo| GitContext[GitRepositoryContext]
    GitContext -->|Clone & Enter| PatchLoop{For each patch}
    
    %% Patch Processing
    PatchLoop -->|Next Patch| GitCheckout[Checkout commit_hash]
    GitCheckout --> GenReport[generate_reachability_report]
    
    %% Patch Analysis Stage
    GenReport --> PatchAnalyzer[PatchAnalyzer.collect_patch_symbols]
    PatchAnalyzer --> AnalyzeDiff[Get Diff & Changed Files]
    AnalyzeDiff --> PatchAnalyzeLoop[Analyze vulnerable & fixed texts]
    PatchAnalyzeLoop --> DetectLang[detect_language_with_scancode]
    DetectLang --> ParsePatchAST[LanguageQuery.parse_code_to_ast]
    ParsePatchAST --> ExtractPatchSymbols[SymbolExtractor: Extract Changed Symbols]
    ExtractPatchSymbols --> DiffSymbols[diff_changed_symbols]
    DiffSymbols --> ResourceLoop{For each candidate_resource}

    %% Resource Matching Stage
    ResourceLoop -->|Next Resource| LangCheck{Language matches patch?}
    LangCheck -->|No| ResourceLoop
    LangCheck -->|Yes| ResAnalyzer[ResourceAnalyzer.build_index]
    
    ResAnalyzer --> ParseResAST[Parse Resource to AST]
    ParseResAST --> IndexResSymbols[Extract definitions, imports, calls]
    IndexResSymbols --> Matcher[ResourcePatchMatcher.match]
    
    Matcher --> MatchVuln[Match Vulnerable Symbols]
    Matcher --> MatchFixed[Match Fixed Symbols]
    
    MatchVuln & MatchFixed --> CheckEvidence{Evidence found?}
    CheckEvidence -->|No| ResourceLoop
    
    %% Reporting Stage
    CheckEvidence -->|Yes| Classify[classify_reachability]
    Classify --> StatusReach[REACHABLE / POTENTIALLY / NOT_REACHABLE]
    StatusReach --> UpdateData[Update resource.extra_data]
    UpdateData --> ResourceLoop

    %% Loop Backs and Exit
    ResourceLoop -->|All resources checked| PatchLoop
    PatchLoop -->|All patches checked| RepoLoop
    RepoLoop -->|All repos checked| End([End Process])

    %% Styling
    classDef functionNode fill:#e1f5fe,stroke:#03a9f4,stroke-width:2px;
    classDef logicNode fill:#fff3e0,stroke:#ff9800,stroke-width:2px;
    classDef loopNode fill:#f3e5f5,stroke:#9c27b0,stroke-width:2px;
    
    class Start,GenReport,PatchAnalyzer,ResAnalyzer,Matcher,Classify functionNode;
    class RepoLoop,PatchLoop,ResourceLoop loopNode;
    class LangCheck,CheckEvidence logicNode;
Loading

Checklist

  • I have read the contributing guidelines
  • I have linked an existing issue above
  • I have added unit tests covering the new code
  • I have reviewed and understood every line of this PR

@ziadhany
ziadhany force-pushed the add-symbol-reachability branch from 944dcbe to da128db Compare June 3, 2026 11:39
@ziadhany

Copy link
Copy Markdown
Collaborator Author

The pipeline requires the unidiff dependency to parse diffs/patch text

@ziadhany
ziadhany force-pushed the add-symbol-reachability branch from d5fed3d to 08512ab Compare June 16, 2026 15:54
@ziadhany
ziadhany marked this pull request as ready for review June 16, 2026 16:24
@ziadhany

Copy link
Copy Markdown
Collaborator Author

This depends on:

We have an API support for patching VulnerableCode, see:

@ziadhany
ziadhany force-pushed the add-symbol-reachability branch 2 times, most recently from 3686a85 to dfbb4db Compare July 1, 2026 13:06
Comment thread scanpipe/pipes/symbols.py Outdated
Comment thread uv.lock
@ziadhany
ziadhany requested a review from TG1999 July 2, 2026 00:58
@ziadhany

ziadhany commented Jul 2, 2026

Copy link
Copy Markdown
Collaborator Author

I'm also not sure why Run unit tests on macOS / run-unit-tests (3.13) is failing.

@TG1999

TG1999 commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

@ziadhany try to fix the failing test please

data = {
"purls": purls,
"details": True,
"reachability": True,

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should only go for reachability if collect_symbols_reachability has called it, not for every VCIO call

@ziadhany ziadhany Jul 14, 2026

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We're currently relying on the find_vulnerabilities pipeline to retrieve vulnerabilities. One possible solution is to introduce an optional field reachability in the find_vulnerabilities pipeline.

Comment thread scanpipe/pipes/reachability.py Outdated
Comment thread scanpipe/pipes/reachability.py
@TG1999

TG1999 commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

@ziadhany this mostly looks good, let's have a session soon and do a demo and understand the limitations of the current approach

Comment thread pyproject.toml Outdated
Comment thread pyproject.toml Outdated
@ziadhany
ziadhany force-pushed the add-symbol-reachability branch from 6768aa8 to 577d4be Compare July 23, 2026 00:53
Comment thread scanpipe/pipelines/find_vulnerabilities.py Outdated
@ziadhany
ziadhany requested a review from TG1999 July 28, 2026 13:17
ziadhany added 9 commits July 30, 2026 02:34
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Fix the test

Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Add missing logic for imports

Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Split pipeline to multiple steps
Build resource_index once per resource

Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Simplify add_reachability_report function
Remove type hints for symbols.py

Signed-off-by: ziad hany <ziadhany2016@gmail.com>
@ziadhany
ziadhany requested a review from keshav-space August 14, 2026 15:19
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
…all commits

Signed-off-by: ziad hany <ziadhany2016@gmail.com>
@ziadhany

ziadhany commented Aug 18, 2026

Copy link
Copy Markdown
Collaborator Author

Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Refactor the pipeline

Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Comment thread scanpipe/pipelines/analyze_symbols_reachability.py
Fix the test

Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Signed-off-by: ziad hany <ziadhany2016@gmail.com>

@keshav-space keshav-space left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @ziadhany, see some suggestions.

Comment thread scanpipe/pipelines/analyze_symbols_reachability.py Outdated
Comment thread scanpipe/pipelines/analyze_symbols_reachability.py Outdated
Comment thread scanpipe/pipelines/analyze_symbols_reachability.py Outdated
Comment thread scanpipe/pipelines/analyze_symbols_reachability.py Outdated
Comment thread scanpipe/pipelines/analyze_symbols_reachability.py
Comment thread scanpipe/pipelines/analyze_symbols_reachability.py Outdated
Comment thread scanpipe/pipelines/analyze_symbols_reachability.py Outdated
Comment thread scanpipe/pipes/reachability.py Outdated
Comment thread scanpipe/pipes/reachability.py Outdated
Comment thread scanpipe/pipes/reachability.py Outdated
Add resource filter based on language we support

Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
@ziadhany
ziadhany requested a review from keshav-space August 28, 2026 03:31
Comment thread scanpipe/pipes/reachability.py Outdated
Signed-off-by: ziad hany <ziadhany2016@gmail.com>
@ziadhany
ziadhany requested a review from keshav-space August 28, 2026 15:45

@keshav-space keshav-space left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @ziadhany, LGTM!

@ziadhany
ziadhany requested a review from tdruez August 28, 2026 20:07
@ziadhany

Copy link
Copy Markdown
Collaborator Author

@tdruez, please approve so I can merge. (Merging is blocked , 1 requested change.)

@tdruez

tdruez commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

@ziadhany The branch is not in a mergeable state, some tests are failing.

@ziadhany

ziadhany commented Aug 31, 2026

Copy link
Copy Markdown
Collaborator Author

@tdruez All the symbol reachability tests are passing. These failures are unrelated to symbol reachability.

see:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants