summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorGarry Filakhtov <[email protected]>2019-11-25 10:52:41 +1100
committerGarry Filakhtov <[email protected]>2019-11-25 10:52:41 +1100
commit8e16501e074b85ef5c5225ed6ff7d5f9856232ef (patch)
tree947ff9adf98c89b8d4924f6eddf568fa7e66c8bf /service
parent8f93aa61da6e66cbd13de96ef53e476556d391a7 (diff)
Replace regular expression with strings.Split()
Originally, a regular expression was used to split and trim multiple comma-separated header names from "Trailer" header. This commit replaces regular expression with strings.Split() to break string into parts and then trims spaces and tabs from individual header names.
Diffstat (limited to 'service')
-rw-r--r--service/http/response.go6
-rw-r--r--service/http/response_test.go17
2 files changed, 20 insertions, 3 deletions
diff --git a/service/http/response.go b/service/http/response.go
index 8dda87c7..166ced82 100644
--- a/service/http/response.go
+++ b/service/http/response.go
@@ -4,7 +4,7 @@ import (
"encoding/json"
"io"
"net/http"
- "regexp"
+ "strings"
"github.com/spiral/roadrunner"
)
@@ -84,9 +84,9 @@ func handleTrailers(h map[string][]string) map[string][]string {
return h
}
- zp := regexp.MustCompile(` *, *`)
for _, tr := range trailers {
- for _, n := range zp.Split(tr, -1) {
+ for _, n := range strings.Split(tr, ",") {
+ n = strings.Trim(n, "\t ")
if v, ok := h[n]; ok {
h["Trailer:"+n] = v
diff --git a/service/http/response_test.go b/service/http/response_test.go
index 7ba9d8d4..ad524567 100644
--- a/service/http/response_test.go
+++ b/service/http/response_test.go
@@ -132,3 +132,20 @@ func TestWrite_HandlesTrailers(t *testing.T) {
assert.Equal(t, "test", w.h.Get("Trailer:foo"))
assert.Equal(t, "demo", w.h.Get("Trailer:bar"))
}
+
+func TestWrite_HandlesHandlesWhitespacesInTrailer(t *testing.T) {
+ r, err := NewResponse(&roadrunner.Payload{
+ Context: []byte(
+ `{"headers":{"trailer":["foo\t,bar , baz"],"foo":["a"],"bar":["b"],"baz":["c"]},"status": 200}`),
+ })
+
+ assert.NoError(t, err)
+ assert.NotNil(t, r)
+
+ w := &testWriter{h: http.Header(make(map[string][]string))}
+ assert.NoError(t, r.Write(w))
+
+ assert.Equal(t, "a", w.h.Get("Trailer:foo"))
+ assert.Equal(t, "b", w.h.Get("Trailer:bar"))
+ assert.Equal(t, "c", w.h.Get("Trailer:baz"))
+}