Skip to content

Commit 24a113b

Browse files
committed
Review feedback: limit number of bytes read under error.
1 parent 46abe8c commit 24a113b

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

storage/remote/client.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"bufio"
1818
"bytes"
1919
"fmt"
20+
"io"
2021
"io/ioutil"
2122
"net/http"
2223
"time"
@@ -32,6 +33,8 @@ import (
3233
"github.com/prometheus/prometheus/util/httputil"
3334
)
3435

36+
const maxErrMsgLen = 256
37+
3538
// Client allows reading and writing from/to a remote HTTP endpoint.
3639
type Client struct {
3740
index int // Used to differentiate metrics.
@@ -118,7 +121,7 @@ func (c *Client) Store(samples model.Samples) error {
118121
defer httpResp.Body.Close()
119122

120123
if httpResp.StatusCode/100 != 2 {
121-
scanner := bufio.NewScanner(httpResp.Body)
124+
scanner := bufio.NewScanner(io.LimitReader(httpResp.Body, maxErrMsgLen))
122125
line := ""
123126
if scanner.Scan() {
124127
line = scanner.Text()

storage/remote/client_test.go

+7-4
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,16 @@ import (
1919
"net/http/httptest"
2020
"net/url"
2121
"reflect"
22+
"strings"
2223
"testing"
2324
"time"
2425

2526
"github.com/prometheus/common/model"
2627
"github.com/prometheus/prometheus/config"
2728
)
2829

30+
var longErrMessage = strings.Repeat("error message", maxErrMsgLen)
31+
2932
func TestStoreHTTPErrorHandling(t *testing.T) {
3033
tests := []struct {
3134
code int
@@ -37,22 +40,22 @@ func TestStoreHTTPErrorHandling(t *testing.T) {
3740
},
3841
{
3942
code: 300,
40-
err: fmt.Errorf("server returned HTTP status 300 Multiple Choices: test error"),
43+
err: fmt.Errorf("server returned HTTP status 300 Multiple Choices: " + longErrMessage[:maxErrMsgLen]),
4144
},
4245
{
4346
code: 404,
44-
err: fmt.Errorf("server returned HTTP status 404 Not Found: test error"),
47+
err: fmt.Errorf("server returned HTTP status 404 Not Found: " + longErrMessage[:maxErrMsgLen]),
4548
},
4649
{
4750
code: 500,
48-
err: recoverableError{fmt.Errorf("server returned HTTP status 500 Internal Server Error: test error")},
51+
err: recoverableError{fmt.Errorf("server returned HTTP status 500 Internal Server Error: " + longErrMessage[:maxErrMsgLen])},
4952
},
5053
}
5154

5255
for i, test := range tests {
5356
server := httptest.NewServer(
5457
http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
55-
http.Error(w, "test error", test.code)
58+
http.Error(w, longErrMessage, test.code)
5659
}),
5760
)
5861

0 commit comments

Comments
 (0)