diff --git a/CHANGELOG.md b/CHANGELOG.md index e6b7740e50d..663a847da3b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -36,6 +36,7 @@ - [#9327](https://github.com/influxdata/influxdb/pull/9327): wal: update lastWriteTime behavior - [#9290](https://github.com/influxdata/influxdb/issues/9290): Fix regression to allow binary operations on literals. - [#9342](https://github.com/influxdata/influxdb/pull/9342): Fix data races in tcp.Mux and tcp.listener +- [#9353](https://github.com/influxdata/influxdb/pull/9353): Fix panic in msgpack httpd WriteResponse error handler. ## v1.4.3 [unreleased] diff --git a/services/httpd/response_writer.go b/services/httpd/response_writer.go index 4e6239df8eb..b8f1caf2a35 100644 --- a/services/httpd/response_writer.go +++ b/services/httpd/response_writer.go @@ -208,7 +208,7 @@ func (f *msgpackFormatter) WriteResponse(resp Response) (n int, err error) { enc.WriteMapHeader(1) if resp.Err != nil { enc.WriteString("error") - enc.WriteString(err.Error()) + enc.WriteString(resp.Err.Error()) return 0, nil } else { enc.WriteString("results") diff --git a/services/httpd/response_writer_test.go b/services/httpd/response_writer_test.go index 08b262a9145..a2b07aa671f 100644 --- a/services/httpd/response_writer_test.go +++ b/services/httpd/response_writer_test.go @@ -129,3 +129,28 @@ func TestResponseWriter_MessagePack(t *testing.T) { t.Fatalf("unexpected output: %s != %s", have, want) } } + +func TestResponseWriter_MessagePack_Error(t *testing.T) { + header := make(http.Header) + header.Set("Accept", "application/x-msgpack") + r := &http.Request{ + Header: header, + URL: &url.URL{}, + } + w := httptest.NewRecorder() + + writer := httpd.NewResponseWriter(w, r) + writer.WriteResponse(httpd.Response{ + Err: fmt.Errorf("test error"), + }) + + reader := msgp.NewReader(w.Body) + var buf bytes.Buffer + if _, err := reader.WriteToJSON(&buf); err != nil { + t.Fatalf("unexpected error: %s", err) + } + want := fmt.Sprintf(`{"error":"test error"}`) + if have := strings.TrimSpace(buf.String()); have != want { + t.Fatalf("unexpected output: %s != %s", have, want) + } +}