avoid overflow in various timeouts (#505)

This commit is contained in:
Joshua Humphries 2025-02-19 11:36:35 -05:00 committed by GitHub
parent 9e3e083f29
commit d00c28104b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 13 additions and 3 deletions

View File

@ -8,6 +8,7 @@ import (
"flag"
"fmt"
"io"
"math"
"os"
"path/filepath"
"strconv"
@ -457,7 +458,7 @@ func main() {
ctx := context.Background()
if *maxTime > 0 {
timeout := time.Duration(*maxTime * float64(time.Second))
timeout := floatSecondsToDuration(*maxTime)
var cancel context.CancelFunc
ctx, cancel = context.WithTimeout(ctx, timeout)
defer cancel()
@ -468,13 +469,13 @@ func main() {
defer dialTiming.Done()
dialTime := 10 * time.Second
if *connectTimeout > 0 {
dialTime = time.Duration(*connectTimeout * float64(time.Second))
dialTime = floatSecondsToDuration(*connectTimeout)
}
ctx, cancel := context.WithTimeout(ctx, dialTime)
defer cancel()
var opts []grpc.DialOption
if *keepaliveTime > 0 {
timeout := time.Duration(*keepaliveTime * float64(time.Second))
timeout := floatSecondsToDuration(*keepaliveTime)
opts = append(opts, grpc.WithKeepaliveParams(keepalive.ClientParameters{
Time: timeout,
Timeout: timeout,
@ -971,3 +972,12 @@ func (f *optionalBoolFlag) Set(s string) error {
func (f *optionalBoolFlag) IsBoolFlag() bool {
return true
}
func floatSecondsToDuration(seconds float64) time.Duration {
durationFloat := seconds * float64(time.Second)
if durationFloat > math.MaxInt64 {
// Avoid overflow
return math.MaxInt64
}
return time.Duration(durationFloat)
}