mirror of
https://github.com/junegunn/fzf.git
synced 2026-05-16 21:45:15 +08:00
Reject every() intervals that overflow int32 milliseconds
Char is rune (int32). Without an upper bound, secs * 1000 could silently wrap to a non-positive value and panic time.NewTicker.
This commit is contained in:
+5
-2
@@ -1315,8 +1315,11 @@ func parseEveryEvent(arg string) (tui.Event, error) {
|
||||
if secs < 0.01 {
|
||||
secs = 0.01
|
||||
}
|
||||
ms := int32(math.Round(secs * 1000))
|
||||
return tui.Event{Type: tui.Every, Char: rune(ms)}, nil
|
||||
ms := math.Round(secs * 1000)
|
||||
if ms > math.MaxInt32 {
|
||||
return tui.Event{}, errors.New("every() interval is too large")
|
||||
}
|
||||
return tui.Event{Type: tui.Every, Char: rune(int32(ms))}, nil
|
||||
}
|
||||
|
||||
func parseScheme(str string) (string, []criterion, error) {
|
||||
|
||||
+2
-2
@@ -323,8 +323,8 @@ func TestParseEveryEvent(t *testing.T) {
|
||||
t.Errorf("every(0.001) should floor to 10ms")
|
||||
}
|
||||
|
||||
// Reject zero and negatives
|
||||
for _, bad := range []string{"every(0)", "every(-1)", "every(abc)", "every()"} {
|
||||
// Reject zero, negatives, and overflow (>= 2^31 ms = ~24.85 days)
|
||||
for _, bad := range []string{"every(0)", "every(-1)", "every(abc)", "every()", "every(2147484)"} {
|
||||
if _, _, err := parseKeyChords(bad, ""); err == nil {
|
||||
t.Errorf("%s should be rejected", bad)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user