diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-13 10:22:29 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-13 10:22:29 +0300 |
| commit | 5856360a696b958a4c5c57cf512c5a04f0cfd66f (patch) | |
| tree | 16a37002ac98f65429f7089b918b3f12c3047296 /internal/flags/flags.go | |
| parent | 7c15d6058cf56e8c7801259f1f842a3a010c5f41 (diff) | |
fix: reject negative and zero -duration flag values with a clear error
A negative or zero -duration was silently accepted, causing the trace
context to be cancelled immediately (time.Duration(N) * time.Second with
N <= 0 yields a non-positive timeout), so no events were ever captured.
parseFromFlagSet now returns an error for Duration <= 0, matching the
existing pattern used for -resetTimer validation.
Three new tests cover the negative, zero, and valid positive cases.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'internal/flags/flags.go')
| -rw-r--r-- | internal/flags/flags.go | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/internal/flags/flags.go b/internal/flags/flags.go index 9d05390..dc87e89 100644 --- a/internal/flags/flags.go +++ b/internal/flags/flags.go @@ -200,12 +200,25 @@ func parseFromFlagSet(fs *flag.FlagSet, args []string) (Config, error) { return Config{}, fmt.Errorf("invalid count field: %s", cfg.CountField) } + // A zero or negative duration would cause the trace context to cancel + // immediately, capturing no events. Require at least one second. + if cfg.Duration <= 0 { + return Config{}, fmt.Errorf("invalid duration: %d (must be > 0)", cfg.Duration) + } + // A negative reset timer would imply auto-resets in the past, which is // nonsensical. 0 disables, anything positive enables. if cfg.ResetTimer < 0 { return Config{}, fmt.Errorf("invalid resetTimer: %s (must be >= 0; 0 disables)", cfg.ResetTimer) } + // A non-positive mapSize would wrap to a huge uint32 when cast in + // resizeBPFMaps, causing libbpf to fail with a confusing "map too large" + // error. Reject it here with a clear diagnostic instead. + if cfg.EventMapSize <= 0 { + return Config{}, fmt.Errorf("invalid mapSize: %d (must be > 0)", cfg.EventMapSize) + } + return cfg, nil } |
