8
8
"flag"
9
9
"fmt"
10
10
"io"
11
+ "math"
11
12
"os"
12
13
"path/filepath"
13
14
"strconv"
@@ -457,7 +458,7 @@ func main() {
457
458
458
459
ctx := context .Background ()
459
460
if * maxTime > 0 {
460
- timeout := time . Duration (* maxTime * float64 ( time . Second ) )
461
+ timeout := floatSecondsToDuration (* maxTime )
461
462
var cancel context.CancelFunc
462
463
ctx , cancel = context .WithTimeout (ctx , timeout )
463
464
defer cancel ()
@@ -468,13 +469,13 @@ func main() {
468
469
defer dialTiming .Done ()
469
470
dialTime := 10 * time .Second
470
471
if * connectTimeout > 0 {
471
- dialTime = time . Duration (* connectTimeout * float64 ( time . Second ) )
472
+ dialTime = floatSecondsToDuration (* connectTimeout )
472
473
}
473
474
ctx , cancel := context .WithTimeout (ctx , dialTime )
474
475
defer cancel ()
475
476
var opts []grpc.DialOption
476
477
if * keepaliveTime > 0 {
477
- timeout := time . Duration (* keepaliveTime * float64 ( time . Second ) )
478
+ timeout := floatSecondsToDuration (* keepaliveTime )
478
479
opts = append (opts , grpc .WithKeepaliveParams (keepalive.ClientParameters {
479
480
Time : timeout ,
480
481
Timeout : timeout ,
@@ -971,3 +972,12 @@ func (f *optionalBoolFlag) Set(s string) error {
971
972
func (f * optionalBoolFlag ) IsBoolFlag () bool {
972
973
return true
973
974
}
975
+
976
+ func floatSecondsToDuration (seconds float64 ) time.Duration {
977
+ durationFloat := seconds * float64 (time .Second )
978
+ if durationFloat > math .MaxInt64 {
979
+ // Avoid overflow
980
+ return math .MaxInt64
981
+ }
982
+ return time .Duration (durationFloat )
983
+ }
0 commit comments