summaryrefslogtreecommitdiff
path: root/internal/flags/flags.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-13 10:22:29 +0300
committerPaul Buetow <paul@buetow.org>2026-05-13 10:22:29 +0300
commit5856360a696b958a4c5c57cf512c5a04f0cfd66f (patch)
tree16a37002ac98f65429f7089b918b3f12c3047296 /internal/flags/flags.go
parent7c15d6058cf56e8c7801259f1f842a3a010c5f41 (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.go13
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
}