Skip to content

Commit 411541d

Browse files
committed
chore: apply review suggestions
1 parent f76740f commit 411541d

File tree

3 files changed

+11
-20
lines changed

3 files changed

+11
-20
lines changed

ftwhttp/header.go

+8-15
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,10 @@ import (
1414
)
1515

1616
const (
17-
headerSeparator = ": "
18-
headerDelimiter = "\r\n"
17+
// HeaderSeparator is used to separate header name and value
18+
HeaderSeparator = ": "
19+
// HeaderDelimiter marks then end of a header (CRLF)
20+
HeaderDelimiter = "\r\n"
1921
)
2022

2123
// Header is a representation of the HTTP header section.
@@ -45,7 +47,7 @@ func NewHeader() *Header {
4547
// This is a convenience and legacy fallback method. In the future,
4648
// headers should be specified as a list, in order to guarantee order
4749
// and to allow requests to contain the same header multiple times,
48-
// potentially, but not necessarily, with different values.
50+
// potentially with different values.
4951
func NewHeaderFromMap(headerMap map[string]string) *Header {
5052
header := NewHeader()
5153
keys := make([]string, 0, len(headerMap))
@@ -121,20 +123,11 @@ func (h *Header) GetAll(name string) []HeaderTuple {
121123
// Write writes the header to the provided writer
122124
func (h *Header) Write(writer io.Writer) error {
123125
buf := bufio.NewWriter(writer)
124-
for _, tuple := range h.entries {
126+
for index, tuple := range h.entries {
125127
if log.Trace().Enabled() {
126-
log.Trace().Msgf("Writing header: %s: %s", tuple.Name, tuple.Value)
127-
}
128-
if _, err := buf.WriteString(tuple.Name); err != nil {
129-
return err
130-
}
131-
if _, err := buf.WriteString(headerSeparator); err != nil {
132-
return err
133-
}
134-
if _, err := buf.WriteString(tuple.Value); err != nil {
135-
return err
128+
log.Trace().Msgf("Writing header %d: %s: %s", index, tuple.Name, tuple.Value)
136129
}
137-
if _, err := buf.WriteString(headerDelimiter); err != nil {
130+
if _, err := buf.WriteString(tuple.Name + HeaderSeparator + tuple.Value + HeaderDelimiter); err != nil {
138131
return err
139132
}
140133

ftwhttp/header_values/constants.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package ftwhttp
1+
package header_values
22

33
const (
44
ApplicationXWwwFormUrlencoded = "application/x-www-form-urlencoded"

ftwhttp/request.go

+2-4
Original file line numberDiff line numberDiff line change
@@ -135,10 +135,8 @@ func BuildRequest(r *Request) ([]byte, error) {
135135

136136
// Multipart form data needs to end in \r\n, per RFC (and modsecurity make a scene if not)
137137
if r.headers.HasAnyValueContaining(header_names.ContentType, "multipart/form-data;") {
138-
crlf := []byte("\r\n")
139-
lf := []byte("\n")
140138
log.Debug().Msgf("ftw/http: with LF only - %d bytes:\n%x\n", len(r.data), r.data)
141-
data = bytes.ReplaceAll(r.data, lf, crlf)
139+
data = bytes.ReplaceAll(r.data, []byte("\n"), []byte(HeaderDelimiter))
142140
log.Debug().Msgf("ftw/http: with CRLF - %d bytes:\n%x\n", len(data), data)
143141
r.data = data
144142
}
@@ -154,7 +152,7 @@ func BuildRequest(r *Request) ([]byte, error) {
154152
}
155153

156154
// After headers, we need one blank line
157-
_, err = b.WriteString("\r\n")
155+
_, err = b.WriteString(HeaderDelimiter)
158156
if err != nil {
159157
log.Debug().Msgf("ftw/http: error writing to buffer: %s", err.Error())
160158
return nil, err

0 commit comments

Comments
 (0)