Skip to content

Commit 847dbdd

Browse files
committed
Fix http_request_timeout disabling for S3
1 parent 1cc8d97 commit 847dbdd

2 files changed

Lines changed: 21 additions & 10 deletions

File tree

s3/config/config.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"fmt"
77
"io"
88
"math"
9+
"strconv"
910
"strings"
1011
"time"
1112
)
@@ -74,7 +75,7 @@ const credentialsSourceEnvOrProfile = "env_or_profile"
7475
const noCredentialsSourceProvided = ""
7576

7677
var errorStaticCredentialsMissing = errors.New("access_key_id and secret_access_key must be provided")
77-
var errorNonPositiveHTTPRequestTimeout = errors.New("http_request_timeout must be greater than 0")
78+
var errorNegativeHTTPRequestTimeout = errors.New("http_request_timeout must not be negative")
7879

7980
type errorStaticCredentialsPresent struct {
8081
credentialsSource string
@@ -269,17 +270,17 @@ func (c *S3Cli) HTTPRequestTimeoutValue() (time.Duration, error) {
269270
return defaultHTTPRequestTimeout, nil
270271
}
271272

272-
if c.HTTPRequestTimeout == "0" {
273-
return 0, nil
273+
if _, err := strconv.ParseFloat(c.HTTPRequestTimeout, 64); err == nil {
274+
return 0, fmt.Errorf("invalid http_request_timeout: missing duration unit")
274275
}
275276

276277
httpRequestTimeout, err := time.ParseDuration(c.HTTPRequestTimeout)
277278
if err != nil {
278279
return 0, fmt.Errorf("invalid http_request_timeout: %w", err)
279280
}
280281

281-
if httpRequestTimeout <= 0 {
282-
return 0, errorNonPositiveHTTPRequestTimeout
282+
if httpRequestTimeout < 0 {
283+
return 0, errorNegativeHTTPRequestTimeout
283284
}
284285

285286
return httpRequestTimeout, nil

s3/config/config_test.go

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -421,17 +421,27 @@ var _ = Describe("BlobstoreClient configuration", func() {
421421
Expect(timeout.Seconds()).To(Equal(45.0))
422422
})
423423

424-
It("disables timeout when set to 0", func() {
425-
dummyJSONBytes := []byte(`{"access_key_id":"id","secret_access_key":"key","bucket_name":"some-bucket","http_request_timeout":"0"}`)
424+
It("disables timeout when set to 0s", func() {
425+
dummyJSONBytes := []byte(`{"access_key_id":"id","secret_access_key":"key","bucket_name":"some-bucket","http_request_timeout":"0s"}`)
426426
dummyJSONReader := bytes.NewReader(dummyJSONBytes)
427427

428428
c, err := config.NewFromReader(dummyJSONReader)
429429
Expect(err).ToNot(HaveOccurred())
430+
Expect(c.HTTPRequestTimeout).To(Equal("0s"))
430431
timeout, err := c.HTTPRequestTimeoutValue()
431432
Expect(err).ToNot(HaveOccurred())
432433
Expect(timeout).To(BeZero())
433434
})
434435

436+
It("rejects numeric timeout values", func() {
437+
dummyJSONBytes := []byte(`{"access_key_id":"id","secret_access_key":"key","bucket_name":"some-bucket","http_request_timeout":45}`)
438+
dummyJSONReader := bytes.NewReader(dummyJSONBytes)
439+
440+
_, err := config.NewFromReader(dummyJSONReader)
441+
Expect(err).To(HaveOccurred())
442+
Expect(err.Error()).To(ContainSubstring("cannot unmarshal number into Go struct field"))
443+
})
444+
435445
It("rejects invalid duration formats", func() {
436446
dummyJSONBytes := []byte(`{"access_key_id":"id","secret_access_key":"key","bucket_name":"some-bucket","http_request_timeout":"bananas"}`)
437447
dummyJSONReader := bytes.NewReader(dummyJSONBytes)
@@ -441,12 +451,12 @@ var _ = Describe("BlobstoreClient configuration", func() {
441451
Expect(err.Error()).To(ContainSubstring("invalid http_request_timeout"))
442452
})
443453

444-
It("rejects non-positive durations", func() {
445-
dummyJSONBytes := []byte(`{"access_key_id":"id","secret_access_key":"key","bucket_name":"some-bucket","http_request_timeout":"0s"}`)
454+
It("rejects negative durations", func() {
455+
dummyJSONBytes := []byte(`{"access_key_id":"id","secret_access_key":"key","bucket_name":"some-bucket","http_request_timeout":"-1s"}`)
446456
dummyJSONReader := bytes.NewReader(dummyJSONBytes)
447457

448458
_, err := config.NewFromReader(dummyJSONReader)
449-
Expect(err).To(MatchError("http_request_timeout must be greater than 0"))
459+
Expect(err).To(MatchError("http_request_timeout must not be negative"))
450460
})
451461
})
452462

0 commit comments

Comments
 (0)