Repository navigation
allowing wildcards in exec args - #322
Conversation
|
Warning Review limit reached
More reviews will be available in 22 minutes and 59 seconds. Learn how PR review limits work. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more reviews become available, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available. Please see our Fair Usage Limits Policy for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (3)
📒 Files selected for processing (7)
📝 WalkthroughWalkthroughAdds MatchExecArgs/CompareExecArgs with a memoized anchored wildcard matcher for profile vs runtime argv vectors, plus ExecCalls.ArgsRequired (types, proto, conversions) and tests covering matching semantics, wire compatibility, and DoS-resistance. ChangesExec argument matching with wildcard support
ExecCalls ArgsRequired API + proto
Sequence Diagram(s)sequenceDiagram
participant Caller
participant MatchExecArgs
participant matchExecArgsStrict
participant memoStore
Caller->>MatchExecArgs: MatchExecArgs(profileArgs, argsRequired, runtimeArgs)
MatchExecArgs->>matchExecArgsStrict: delegate when strict required
matchExecArgsStrict->>memoStore: lookup (pi,ri)
memoStore-->>matchExecArgsStrict: cached result / miss
matchExecArgsStrict->>matchExecArgsStrict: recurse advance or try wildcard splits
matchExecArgsStrict->>memoStore: store result(pi,ri)
matchExecArgsStrict-->>MatchExecArgs: boolean
MatchExecArgs-->>Caller: return boolean
🎯 4 (Complex) | ⏱️ ~45 minutes Suggested reviewers:
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (2)
pkg/registry/file/dynamicpathdetector/compare_exec_args.go (1)
45-55: 💤 Low valueCollapse
seen+memointo a single map using the comma-ok idiom.Two parallel maps keyed by the same state double allocations and obscure intent. The standard Go pattern is to check presence on the result map directly. Behavior is identical.
♻️ Proposed simplification
type state struct{ pi, ri int } - memo := make(map[state]bool, (len(profileArgs)+1)*(len(runtimeArgs)+1)) - seen := make(map[state]bool, (len(profileArgs)+1)*(len(runtimeArgs)+1)) + memo := make(map[state]bool, (len(profileArgs)+1)*(len(runtimeArgs)+1)) var match func(pi, ri int) bool match = func(pi, ri int) bool { s := state{pi: pi, ri: ri} - if seen[s] { - return memo[s] + if v, ok := memo[s]; ok { + return v } - seen[s] = true🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@pkg/registry/file/dynamicpathdetector/compare_exec_args.go` around lines 45 - 55, The code uses two maps (seen and memo) keyed by state in compare logic; collapse them into a single map (e.g., memo map[state]bool) and use the comma-ok idiom inside match to check if an entry exists: construct s := state{pi: pi, ri: ri}, if val, ok := memo[s]; ok { return val } then continue computing and store the result in memo[s] before returning. Update references to seen and memo in the match closure and initialization (remove seen, keep memo sized with (len(profileArgs)+1)*(len(runtimeArgs)+1)).pkg/registry/file/dynamicpathdetector/tests/compare_exec_args_test.go (1)
300-313: 💤 Low valueWall-clock budget is shared-runner flaky; consider a deterministic cap.
A 100ms wall-clock budget on adversarial input is a reasonable smoke test, but shared CI runners under load can blow past it without an actual algorithmic regression — producing flakes that erode trust in the suite. Options that retain the guarantee without time-sensitivity:
- Increase budget substantially (e.g., 1–2s) — still catches an exponential blow-up (which would be many seconds to minutes), with much wider headroom for noisy runners.
- Or, scale the wildcard count up (e.g., 30–40
*s) so the unmemoised form would take effectively forever, then use a generous budget. The memoised form stays microseconds either way.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@pkg/registry/file/dynamicpathdetector/tests/compare_exec_args_test.go` around lines 300 - 313, Replace the flaky 100ms wall-clock assertion in the test that times CompareExecArgs by increasing the deterministic cap: change the elapsed check to use a much larger budget (e.g., 2*time.Second) instead of 100*time.Millisecond (update the local variables start/elapsed check around CompareExecArgs), or alternatively make the adversarial input stronger by increasing the wildcard count (the pattern used to build the profile) so the unmemoised algorithm would take orders of magnitude longer while keeping the memoised form fast; update the test assertion and any comment to reflect the new budget or stronger input.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@pkg/registry/file/dynamicpathdetector/compare_exec_args.go`:
- Line 66: The package references an undefined constant WildcardIdentifier (used
in compare_exec_args.go and tests) which causes compilation failure; add a
string constant named WildcardIdentifier (value "*" to represent "zero or more
consecutive arguments") next to the existing DynamicIdentifier constant in the
package's types definitions so all references to WildcardIdentifier resolve
correctly and behavior matches the documented wildcard semantics.
---
Nitpick comments:
In `@pkg/registry/file/dynamicpathdetector/compare_exec_args.go`:
- Around line 45-55: The code uses two maps (seen and memo) keyed by state in
compare logic; collapse them into a single map (e.g., memo map[state]bool) and
use the comma-ok idiom inside match to check if an entry exists: construct s :=
state{pi: pi, ri: ri}, if val, ok := memo[s]; ok { return val } then continue
computing and store the result in memo[s] before returning. Update references to
seen and memo in the match closure and initialization (remove seen, keep memo
sized with (len(profileArgs)+1)*(len(runtimeArgs)+1)).
In `@pkg/registry/file/dynamicpathdetector/tests/compare_exec_args_test.go`:
- Around line 300-313: Replace the flaky 100ms wall-clock assertion in the test
that times CompareExecArgs by increasing the deterministic cap: change the
elapsed check to use a much larger budget (e.g., 2*time.Second) instead of
100*time.Millisecond (update the local variables start/elapsed check around
CompareExecArgs), or alternatively make the adversarial input stronger by
increasing the wildcard count (the pattern used to build the profile) so the
unmemoised algorithm would take orders of magnitude longer while keeping the
memoised form fast; update the test assertion and any comment to reflect the new
budget or stronger input.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: e50038fd-c79c-449f-b3e3-2d53a45b7e78
📒 Files selected for processing (2)
pkg/registry/file/dynamicpathdetector/compare_exec_args.gopkg/registry/file/dynamicpathdetector/tests/compare_exec_args_test.go
|
Re-review requested after applying atomic-split advisory and rabbit-feedback fixes. Please assess ✅ Actions performedFull review triggered. |
| // The inner matcher keeps strict empty-empty semantics so anchoring | ||
| // during recursion (`profile fully consumed but runtime has more`) | ||
| // remains a mismatch. | ||
| if len(profileArgs) == 0 { |
There was a problem hiding this comment.
Blocking: this contract currently can't work as documented. ExecCalls.Args is serialized as json:\"args,omitempty\", so an explicit args: [] round-trips back as omitted/nil. Combined with if len(profileArgs) == 0 { return true }, both cases become "no argv constraint", which means a profile can't reliably express "no args" and was_executed_with_args will silently accept unexpected argv.
Even changing this branch to profileArgs == nil would still leave the storage/API round-trip problem. I think this needs either a representation that can persist the distinction (pointer/explicit flag/etc.) or semantics that do not rely on distinguishing omitted from empty.
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@pkg/apis/softwarecomposition/v1beta1/execcalls_protobuf_test.go`:
- Around line 7-13: The build breaks due to an undefined symbol
WildcardIdentifier referenced in compare_exec_args.go; fix by either importing
the package that actually defines WildcardIdentifier or (to keep this PR atomic)
add a minimal local shim for WildcardIdentifier in the same package so the code
compiles: define the symbol with the same kind (e.g., a struct or typed
constant) and the minimal methods/fields used by the code that calls it (look
for usages in functions like the exec-args comparison helpers in
compare_exec_args.go) so tests and typechecking pass until `#323` is merged.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: 70dee8f8-6315-4202-9e6e-735bef295b4a
⛔ Files ignored due to path filters (3)
pkg/apis/softwarecomposition/v1beta1/generated.pb.gois excluded by!**/*.pb.gopkg/generated/applyconfiguration/softwarecomposition/v1beta1/execcalls.gois excluded by!**/generated/**pkg/generated/openapi/zz_generated.openapi.gois excluded by!**/generated/**
📒 Files selected for processing (7)
pkg/apis/softwarecomposition/types.gopkg/apis/softwarecomposition/v1beta1/execcalls_protobuf_test.gopkg/apis/softwarecomposition/v1beta1/generated.protopkg/apis/softwarecomposition/v1beta1/types.gopkg/apis/softwarecomposition/v1beta1/zz_generated.conversion.gopkg/registry/file/dynamicpathdetector/compare_exec_args.gopkg/registry/file/dynamicpathdetector/tests/compare_exec_args_test.go
✅ Files skipped from review due to trivial changes (1)
- pkg/apis/softwarecomposition/v1beta1/zz_generated.conversion.go
| // TestExecCalls_ArgsRequired_ProtobufRoundtrip pins the wire-contract for | ||
| // the new ArgsRequired field. The codec hand-edits in generated.pb.go | ||
| // (MarshalToSizedBuffer / Size / Unmarshal / String) were not run through | ||
| // go-to-protobuf because the protoc image is x86_64-only and we are on | ||
| // aarch64 (see README §"Changes to the Types"). This test makes sure the | ||
| // hand-edit is wire-compatible by round-tripping all four ArgsRequired/Args | ||
| // combinations through the gogoproto codec. |
There was a problem hiding this comment.
PR is still cross-coupled and non-atomic without #323.
Typecheck currently fails with undefined: WildcardIdentifier in pkg/registry/file/dynamicpathdetector/compare_exec_args.go (Line 113), which confirms this PR cannot compile independently.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@pkg/apis/softwarecomposition/v1beta1/execcalls_protobuf_test.go` around lines
7 - 13, The build breaks due to an undefined symbol WildcardIdentifier
referenced in compare_exec_args.go; fix by either importing the package that
actually defines WildcardIdentifier or (to keep this PR atomic) add a minimal
local shim for WildcardIdentifier in the same package so the code compiles:
define the symbol with the same kind (e.g., a struct or typed constant) and the
minimal methods/fields used by the code that calls it (look for usages in
functions like the exec-args comparison helpers in compare_exec_args.go) so
tests and typechecking pass until `#323` is merged.
Signed-off-by: entlein <einentlein@gmail.com>
Signed-off-by: entlein <einentlein@gmail.com>
Signed-off-by: entlein <einentlein@gmail.com>
abde5c3 to
5e39d00
Compare
This PR (R0040 args consumer) references dynamicpathdetector.CompareExecArgs, which ships in k8sstormcenter/storage's upstream-pr/sbob-execs branch (the storage sibling of kubescape/storage#322), not in any released kubescape/storage tag. The PR's existing go.mod pin (v0.0.258) does not contain it. Adds a replace directive to the sister branch's current tip (5e39d001 — feat(apis): add ExecCalls.ArgsRequired + MatchExecArgs to express 'no args'). Removed when the sister storage PR kubescape/storage#322 merges and a release ships CompareExecArgs. Companion to the stacking-on-NA-kubescape#812 cherry-pick (provides cp.ExecsByPath) in the previous commits on this branch. Resolves the matthyx 'does not build' blocker on PR kubescape#807 (2026-05-27).
This PR (R0040 args consumer) references dynamicpathdetector.CompareExecArgs, which ships in k8sstormcenter/storage's upstream-pr/sbob-execs branch (the storage sibling of kubescape/storage#322), not in any released kubescape/storage tag. The PR's existing go.mod pin (v0.0.258) does not contain it. Adds a replace directive to the sister branch's current tip (5e39d001 — feat(apis): add ExecCalls.ArgsRequired + MatchExecArgs to express 'no args'). Removed when the sister storage PR kubescape/storage#322 merges and a release ships CompareExecArgs. Companion to the stacking-on-NA-kubescape#812 cherry-pick (provides cp.ExecsByPath) in the previous commits on this branch. Resolves the matthyx 'does not build' blocker on PR kubescape#807 (2026-05-27). Signed-off-by: entlein <einentlein@gmail.com>
….278 Storage PR kubescape/storage#322 (CompareExecArgs + MatchExecArgs + ExecCalls.ArgsRequired) merged to kubescape/storage main and a release was cut (v0.0.278, 2026-05-28). The k8sstormcenter sister-branch replace is no longer needed — pinning the real tag.
This PR (R0040 args consumer) references dynamicpathdetector.CompareExecArgs, which ships in k8sstormcenter/storage's upstream-pr/sbob-execs branch (the storage sibling of kubescape/storage#322), not in any released kubescape/storage tag. The PR's existing go.mod pin (v0.0.258) does not contain it. Adds a replace directive to the sister branch's current tip (5e39d001 — feat(apis): add ExecCalls.ArgsRequired + MatchExecArgs to express 'no args'). Removed when the sister storage PR kubescape/storage#322 merges and a release ships CompareExecArgs. Companion to the stacking-on-NA-kubescape#812 cherry-pick (provides cp.ExecsByPath) in the previous commits on this branch. Resolves the matthyx 'does not build' blocker on PR kubescape#807 (2026-05-27). Signed-off-by: entlein <einentlein@gmail.com>
….278 Storage PR kubescape/storage#322 (CompareExecArgs + MatchExecArgs + ExecCalls.ArgsRequired) merged to kubescape/storage main and a release was cut (v0.0.278, 2026-05-28). The k8sstormcenter sister-branch replace is no longer needed — pinning the real tag. Signed-off-by: entlein <einentlein@gmail.com>
This PR (R0040 args consumer) references dynamicpathdetector.CompareExecArgs, which ships in k8sstormcenter/storage's upstream-pr/sbob-execs branch (the storage sibling of kubescape/storage#322), not in any released kubescape/storage tag. The PR's existing go.mod pin (v0.0.258) does not contain it. Adds a replace directive to the sister branch's current tip (5e39d001 — feat(apis): add ExecCalls.ArgsRequired + MatchExecArgs to express 'no args'). Removed when the sister storage PR kubescape/storage#322 merges and a release ships CompareExecArgs. Companion to the stacking-on-NA-kubescape#812 cherry-pick (provides cp.ExecsByPath) in the previous commits on this branch. Resolves the matthyx 'does not build' blocker on PR kubescape#807 (2026-05-27). Signed-off-by: entlein <einentlein@gmail.com>
….278 Storage PR kubescape/storage#322 (CompareExecArgs + MatchExecArgs + ExecCalls.ArgsRequired) merged to kubescape/storage main and a release was cut (v0.0.278, 2026-05-28). The k8sstormcenter sister-branch replace is no longer needed — pinning the real tag. Signed-off-by: entlein <einentlein@gmail.com>
This PR (R0040 args consumer) references dynamicpathdetector.CompareExecArgs, which ships in k8sstormcenter/storage's upstream-pr/sbob-execs branch (the storage sibling of kubescape/storage#322), not in any released kubescape/storage tag. The PR's existing go.mod pin (v0.0.258) does not contain it. Adds a replace directive to the sister branch's current tip (5e39d001 — feat(apis): add ExecCalls.ArgsRequired + MatchExecArgs to express 'no args'). Removed when the sister storage PR kubescape/storage#322 merges and a release ships CompareExecArgs. Companion to the stacking-on-NA-kubescape#812 cherry-pick (provides cp.ExecsByPath) in the previous commits on this branch. Resolves the matthyx 'does not build' blocker on PR kubescape#807 (2026-05-27). Signed-off-by: entlein <einentlein@gmail.com>
….278 Storage PR kubescape/storage#322 (CompareExecArgs + MatchExecArgs + ExecCalls.ArgsRequired) merged to kubescape/storage main and a release was cut (v0.0.278, 2026-05-28). The k8sstormcenter sister-branch replace is no longer needed — pinning the real tag. Signed-off-by: entlein <einentlein@gmail.com>
This PR (R0040 args consumer) references dynamicpathdetector.CompareExecArgs, which ships in k8sstormcenter/storage's upstream-pr/sbob-execs branch (the storage sibling of kubescape/storage#322), not in any released kubescape/storage tag. The PR's existing go.mod pin (v0.0.258) does not contain it. Adds a replace directive to the sister branch's current tip (5e39d001 — feat(apis): add ExecCalls.ArgsRequired + MatchExecArgs to express 'no args'). Removed when the sister storage PR kubescape/storage#322 merges and a release ships CompareExecArgs. Companion to the stacking-on-NA-kubescape#812 cherry-pick (provides cp.ExecsByPath) in the previous commits on this branch. Resolves the matthyx 'does not build' blocker on PR kubescape#807 (2026-05-27). Signed-off-by: entlein <einentlein@gmail.com>
….278 Storage PR kubescape/storage#322 (CompareExecArgs + MatchExecArgs + ExecCalls.ArgsRequired) merged to kubescape/storage main and a release was cut (v0.0.278, 2026-05-28). The k8sstormcenter sister-branch replace is no longer needed — pinning the real tag. Signed-off-by: entlein <einentlein@gmail.com>
This PR (R0040 args consumer) references dynamicpathdetector.CompareExecArgs, which ships in k8sstormcenter/storage's upstream-pr/sbob-execs branch (the storage sibling of kubescape/storage#322), not in any released kubescape/storage tag. The PR's existing go.mod pin (v0.0.258) does not contain it. Adds a replace directive to the sister branch's current tip (5e39d001 — feat(apis): add ExecCalls.ArgsRequired + MatchExecArgs to express 'no args'). Removed when the sister storage PR kubescape/storage#322 merges and a release ships CompareExecArgs. Companion to the stacking-on-NA-kubescape#812 cherry-pick (provides cp.ExecsByPath) in the previous commits on this branch. Resolves the matthyx 'does not build' blocker on PR kubescape#807 (2026-05-27). Signed-off-by: entlein <einentlein@gmail.com>
….278 Storage PR kubescape/storage#322 (CompareExecArgs + MatchExecArgs + ExecCalls.ArgsRequired) merged to kubescape/storage main and a release was cut (v0.0.278, 2026-05-28). The k8sstormcenter sister-branch replace is no longer needed — pinning the real tag. Signed-off-by: entlein <einentlein@gmail.com>
…807) * feat(projection): add ExecsByPath composite-key surface to ProjectedContainerProfile Signed-off-by: entlein <einentlein@gmail.com> * path-wildcards: anchored trailing-* + per-endpoint port + R0040 args Signed-off-by: entlein <einentlein@gmail.com> * restoring ap_was_path_opened_with_flags Signed-off-by: entlein <einentlein@gmail.com> * apply rabbit feedback: align R0040 args consumer with rc1 final state Signed-off-by: entlein <einentlein@gmail.com> * build(go.mod): replace kubescape/storage with sister execs branch This PR (R0040 args consumer) references dynamicpathdetector.CompareExecArgs, which ships in k8sstormcenter/storage's upstream-pr/sbob-execs branch (the storage sibling of kubescape/storage#322), not in any released kubescape/storage tag. The PR's existing go.mod pin (v0.0.258) does not contain it. Adds a replace directive to the sister branch's current tip (5e39d001 — feat(apis): add ExecCalls.ArgsRequired + MatchExecArgs to express 'no args'). Removed when the sister storage PR kubescape/storage#322 merges and a release ships CompareExecArgs. Companion to the stacking-on-NA-#812 cherry-pick (provides cp.ExecsByPath) in the previous commits on this branch. Resolves the matthyx 'does not build' blocker on PR #807 (2026-05-27). Signed-off-by: entlein <einentlein@gmail.com> * test: add Test_32_UnexpectedProcessArguments + fixtures Signed-off-by: entlein <einentlein@gmail.com> * test: add Test_32_UnexpectedProcessArguments + fixtures Signed-off-by: entlein <einentlein@gmail.com> * build(go.mod): drop sister-branch replace; pin kubescape/storage v0.0.278 Storage PR kubescape/storage#322 (CompareExecArgs + MatchExecArgs + ExecCalls.ArgsRequired) merged to kubescape/storage main and a release was cut (v0.0.278, 2026-05-28). The k8sstormcenter sister-branch replace is no longer needed — pinning the real tag. Signed-off-by: entlein <einentlein@gmail.com> * fix(tests): de-duplicate Test_32 / file-header / package decl Previous Test_32 add appended the full umbrella component_test.go on top of the legitimate one, producing two //go:build directives, two package clauses, two import blocks and a triplicated Test_32 body. gofmt -e rejected the file at lines 1574, 1576, 4978, 5206. Truncates to the last legitimate line and re-appends only the Test_32 function from the umbrella branch. File parses clean, single instance of each top-level element. Resolves matthyx blocker (1) on PR #807 (2026-05-28). Signed-off-by: entlein <einentlein@gmail.com> * build(go.mod): tidy + pin runtime-spec v1.2.1 for -mod=readonly clean Storage v0.0.278 bump pulled in a transitive dep set that drove runtime-spec up to v1.3.0, which is incompatible with containerd v1.7.32's spec_opts.go (cannot use int64 as *int64). Upstream NA main runs on runtime-spec v1.2.1; pin it the same way here via replace so 'go test -mod=readonly' is clean (matthyx blocker 2 on PR #807, 2026-05-28). Also runs full mod tidy now that v0.0.278 has shipped — populates the transitive go.sum entries that were missing under the previous sister-branch replace, so CI's -mod=readonly accepts the module graph. Signed-off-by: entlein <einentlein@gmail.com> * fix(projection): ExecsByPath becomes path -> []argv-vectors Previous shape (map[string][]string) collapsed duplicate Path entries to the last seen, breaking merged profiles where mergeApplicationProfile legitimately appends multiple ExecCalls per path with distinct argv shapes. ap.was_executed_with_args silently rejected valid executions that matched any but the final entry (matthyx blocker 3 on PR #807, 2026-05-28). extractExecsByPath now appends each Args slice to a per-path list. wasExecutedWithArgs iterates the list and returns true when any vector matches via CompareExecArgs. The 'absent key means no argv constraint' back-compat semantic is unchanged. Cloned-slice invariant preserved. Updates TestApply_ExecsByPath_PopulatesFromSpec to assert the appended-list shape and the second-entry mutation invariant. Signed-off-by: entlein <einentlein@gmail.com> * test(mock): populate ExecsByPath in RuleObjectCacheMock projection Mirrors containerprofilecache.Apply's extractExecsByPath shape so exec-args unit tests exercise the real wildcard matcher instead of hitting the absent-key 'no argv constraint' back-compat fallback. Same per-Path append + nil→empty-slice rules. Fixes the four TestExecWithArgsWildcardInProfile cases that were silently returning true (back-compat) and getting marked as failing expected:false (sh -x wrong flag, ls -l no directory, echo goodbye world wrong literal anchor, curl --pass alice wrong literal). Signed-off-by: entlein <einentlein@gmail.com> * test 27 is for PR 807, test 32 is for PR 805, now swapping them , also go mod sync with main Signed-off-by: entlein <einentlein@gmail.com> * restoring earlier go dependencies Signed-off-by: entlein <einentlein@gmail.com> * go.mod dependencies Signed-off-by: entlein <einentlein@gmail.com> * adding strings in import Signed-off-by: entlein <einentlein@gmail.com> * rebase attempt 1 Signed-off-by: entlein <einentlein@gmail.com> * consolidating PRs 807 811 and 812 all into 807 Signed-off-by: entlein <einentlein@gmail.com> --------- Signed-off-by: entlein <einentlein@gmail.com> Co-authored-by: Entlein <eineintlein@gmail.com>
exec-path: symlink-faithful argv[0] resolution
This PR depends on
#323and must be merged AFTER it.PR
#323definesWildcardIdentifier(and the broaderCollapseConfig/NewPathAnalyzerWithConfigssurface) intypes.goandanalyzer.go. Without it,compare_exec_args.go(this PR) fails to compile becauseWildcardIdentifieris undefined.Correct merge order:
#323— path-wildcards: anchored trailing-*+ per-endpoint port + R0040 args#322(this PR) — allowing wildcards in exec argsSummary by CodeRabbit
New Features
Tests
Chores