refactor(appsec): extract rel_path and get_caller_frame_info to _patch_utils#17334
Conversation
…h_utils Move rel_path() and the frame-walking logic (_compute_file_line) from VulnerabilityBase in _iast/taint_sinks/_base.py to shared functions in _patch_utils.py so both IAST and SCA can reuse them without depending on IAST internals. Also migrates insecure_cookie.py and updates test_weak_hash.py mock target accordingly. Split out from #17156 to keep PRs incremental and reviewable. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Codeowners resolved as |
Performance SLOsComparing candidate avara1986/extract-caller-frame-info-to-patch-utils-v2 (65476a5) with baseline main (199f2fc) 📈 Performance Regressions (2 suites)📈 iastaspectsospath - 24/24✅ ospathbasename_aspectTime: ✅ 516.147µs (SLO: <700.000µs 📉 -26.3%) vs baseline: 📈 +23.3% Memory: ✅ 43.798MB (SLO: <46.000MB -4.8%) vs baseline: +4.5% ✅ ospathbasename_noaspectTime: ✅ 429.315µs (SLO: <700.000µs 📉 -38.7%) vs baseline: +1.1% Memory: ✅ 43.694MB (SLO: <46.000MB -5.0%) vs baseline: +4.3% ✅ ospathjoin_aspectTime: ✅ 622.887µs (SLO: <700.000µs 📉 -11.0%) vs baseline: ~same Memory: ✅ 43.900MB (SLO: <46.000MB -4.6%) vs baseline: +4.7% ✅ ospathjoin_noaspectTime: ✅ 632.972µs (SLO: <700.000µs -9.6%) vs baseline: +0.5% Memory: ✅ 43.725MB (SLO: <46.000MB -4.9%) vs baseline: +4.3% ✅ ospathnormcase_aspectTime: ✅ 351.748µs (SLO: <700.000µs 📉 -49.8%) vs baseline: +1.8% Memory: ✅ 43.869MB (SLO: <46.000MB -4.6%) vs baseline: +4.9% ✅ ospathnormcase_noaspectTime: ✅ 360.452µs (SLO: <700.000µs 📉 -48.5%) vs baseline: +2.1% Memory: ✅ 43.715MB (SLO: <46.000MB -5.0%) vs baseline: +4.3% ✅ ospathsplit_aspectTime: ✅ 485.642µs (SLO: <700.000µs 📉 -30.6%) vs baseline: -0.5% Memory: ✅ 43.823MB (SLO: <46.000MB -4.7%) vs baseline: +4.4% ✅ ospathsplit_noaspectTime: ✅ 496.587µs (SLO: <700.000µs 📉 -29.1%) vs baseline: +0.8% Memory: ✅ 43.620MB (SLO: <46.000MB -5.2%) vs baseline: +4.1% ✅ ospathsplitdrive_aspectTime: ✅ 373.361µs (SLO: <700.000µs 📉 -46.7%) vs baseline: +0.6% Memory: ✅ 43.871MB (SLO: <46.000MB -4.6%) vs baseline: +4.4% ✅ ospathsplitdrive_noaspectTime: ✅ 73.070µs (SLO: <700.000µs 📉 -89.6%) vs baseline: -0.6% Memory: ✅ 43.658MB (SLO: <46.000MB -5.1%) vs baseline: +4.1% ✅ ospathsplitext_aspectTime: ✅ 455.808µs (SLO: <700.000µs 📉 -34.9%) vs baseline: ~same Memory: ✅ 43.785MB (SLO: <46.000MB -4.8%) vs baseline: +4.5% ✅ ospathsplitext_noaspectTime: ✅ 463.500µs (SLO: <700.000µs 📉 -33.8%) vs baseline: +1.3% Memory: ✅ 43.682MB (SLO: <46.000MB -5.0%) vs baseline: +4.2% 📈 iastaspectssplit - 12/12✅ rsplit_aspectTime: ✅ 166.972µs (SLO: <250.000µs 📉 -33.2%) vs baseline: 📈 +11.9% Memory: ✅ 43.801MB (SLO: <46.000MB -4.8%) vs baseline: +4.5% ✅ rsplit_noaspectTime: ✅ 160.991µs (SLO: <250.000µs 📉 -35.6%) vs baseline: +2.8% Memory: ✅ 43.866MB (SLO: <46.000MB -4.6%) vs baseline: +4.5% ✅ split_aspectTime: ✅ 152.128µs (SLO: <250.000µs 📉 -39.1%) vs baseline: +2.2% Memory: ✅ 43.820MB (SLO: <46.000MB -4.7%) vs baseline: +4.5% ✅ split_noaspectTime: ✅ 156.970µs (SLO: <250.000µs 📉 -37.2%) vs baseline: +2.0% Memory: ✅ 43.897MB (SLO: <46.000MB -4.6%) vs baseline: +4.5% ✅ splitlines_aspectTime: ✅ 150.226µs (SLO: <250.000µs 📉 -39.9%) vs baseline: +2.7% Memory: ✅ 43.849MB (SLO: <46.000MB -4.7%) vs baseline: +5.1% ✅ splitlines_noaspectTime: ✅ 156.674µs (SLO: <250.000µs 📉 -37.3%) vs baseline: +4.6% Memory: ✅ 43.840MB (SLO: <46.000MB -4.7%) vs baseline: +4.5% ✅ All Tests Passing (1 suite)✅ iastpropagation - 8/8✅ no-propagationTime: ✅ 47.854µs (SLO: <60.000µs 📉 -20.2%) vs baseline: -1.4% Memory: ✅ 40.147MB (SLO: <42.000MB -4.4%) vs baseline: +5.1% ✅ propagation_enabledTime: ✅ 135.389µs (SLO: <190.000µs 📉 -28.7%) vs baseline: +0.7% Memory: ✅ 40.246MB (SLO: <42.000MB -4.2%) vs baseline: +5.2% ✅ propagation_enabled_100Time: ✅ 1.570ms (SLO: <2.300ms 📉 -31.8%) vs baseline: +1.4% Memory: ✅ 40.108MB (SLO: <42.000MB -4.5%) vs baseline: +5.0% ✅ propagation_enabled_1000Time: ✅ 29.362ms (SLO: <34.550ms 📉 -15.0%) vs baseline: +1.0% Memory: ✅ 40.187MB (SLO: <42.000MB -4.3%) vs baseline: +5.1% ℹ️ Scenarios Missing SLO Configuration (20 scenarios)The following scenarios exist in candidate data but have no SLO thresholds configured:
|
|
/merge |
|
View all feedbacks in Devflow UI.
The expected merge time in
|
Summary
rel_path()and_compute_file_line()fromVulnerabilityBasein_iast/taint_sinks/_base.pyinto shared functions (rel_pathandget_caller_frame_info) in_patch_utils.py.insecure_cookie.pyto use the sharedget_caller_frame_info()instead ofcls._compute_file_line().test_weak_hash.pymock target fromget_info_frametoget_caller_frame_info.Split out from #17156 to keep PRs incremental and reviewable.
Test plan
VulnerabilityBase.report()which now delegates toget_caller_frame_info())insecure_cookie.pynow uses shared function)test_weak_hash.pyedge case test passes with updated mock target🤖 Generated with Claude Code