Skip to content

Commit 423c17d

Browse files
authored
Merge pull request kubernetes#90086 from rvillablanca/fix/handle-error-parseform
Handling error returned by request.Request.ParseForm()
2 parents d63d77d + 1014d30 commit 423c17d

File tree

3 files changed

+21
-2
lines changed

3 files changed

+21
-2
lines changed

pkg/kubelet/server/server_test.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1579,6 +1579,20 @@ func TestDebuggingDisabledHandlers(t *testing.T) {
15791579

15801580
}
15811581

1582+
func TestFailedParseParamsSummaryHandler(t *testing.T) {
1583+
fw := newServerTest()
1584+
defer fw.testHTTPServer.Close()
1585+
1586+
resp, err := http.Post(fw.testHTTPServer.URL+"/stats/summary", "invalid/content/type", nil)
1587+
assert.NoError(t, err)
1588+
defer resp.Body.Close()
1589+
v, err := ioutil.ReadAll(resp.Body)
1590+
assert.NoError(t, err)
1591+
assert.Equal(t, http.StatusInternalServerError, resp.StatusCode)
1592+
assert.Contains(t, string(v), "parse form failed")
1593+
1594+
}
1595+
15821596
func TestTrimURLPath(t *testing.T) {
15831597
tests := []struct {
15841598
path, expected string

pkg/kubelet/server/stats/BUILD

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ go_library(
2929
"//staging/src/k8s.io/component-base/metrics:go_default_library",
3030
"//vendor/github.com/emicklei/go-restful:go_default_library",
3131
"//vendor/github.com/google/cadvisor/info/v1:go_default_library",
32+
"//vendor/github.com/pkg/errors:go_default_library",
3233
"//vendor/k8s.io/klog:go_default_library",
3334
],
3435
)

pkg/kubelet/server/stats/handler.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626

2727
restful "github.com/emicklei/go-restful"
2828
cadvisorapi "github.com/google/cadvisor/info/v1"
29+
"github.com/pkg/errors"
2930
"k8s.io/klog"
3031

3132
"k8s.io/api/core/v1"
@@ -215,13 +216,16 @@ func (h *handler) handleStats(request *restful.Request, response *restful.Respon
215216
// If "only_cpu_and_memory" GET param is true then only cpu and memory is returned in response.
216217
func (h *handler) handleSummary(request *restful.Request, response *restful.Response) {
217218
onlyCPUAndMemory := false
218-
request.Request.ParseForm()
219+
err := request.Request.ParseForm()
220+
if err != nil {
221+
handleError(response, "/stats/summary", errors.Wrapf(err, "parse form failed"))
222+
return
223+
}
219224
if onlyCluAndMemoryParam, found := request.Request.Form["only_cpu_and_memory"]; found &&
220225
len(onlyCluAndMemoryParam) == 1 && onlyCluAndMemoryParam[0] == "true" {
221226
onlyCPUAndMemory = true
222227
}
223228
var summary *statsapi.Summary
224-
var err error
225229
if onlyCPUAndMemory {
226230
summary, err = h.summaryProvider.GetCPUAndMemoryStats()
227231
} else {

0 commit comments

Comments
 (0)