Return HTTP response error for malformed requests (#6517)

master
Harshavardhana 6 years ago committed by kannappanr
parent ec2295c3dc
commit 1e5ac39ff3
  1. 10
      cmd/http/listener.go
  2. 10
      cmd/http/listener_test.go

@ -35,6 +35,10 @@ import (
var sslRequiredErrMsg = []byte("HTTP/1.0 403 Forbidden\r\n\r\nSSL required") var sslRequiredErrMsg = []byte("HTTP/1.0 403 Forbidden\r\n\r\nSSL required")
var malformedErrMsgFn = func(data interface{}) string {
return fmt.Sprintf("HTTP/1.0 400 Bad Request\r\n\r\n%s", data)
}
// HTTP methods. // HTTP methods.
var methods = []string{ var methods = []string{
http.MethodGet, http.MethodGet,
@ -263,6 +267,7 @@ func (listener *httpListener) start() {
ctx := logger.SetReqInfo(context.Background(), reqInfo) ctx := logger.SetReqInfo(context.Background(), reqInfo)
logger.LogIf(ctx, err) logger.LogIf(ctx, err)
} }
bufconn.Write([]byte(malformedErrMsgFn(err)))
bufconn.Close() bufconn.Close()
return return
} }
@ -272,8 +277,9 @@ func (listener *httpListener) start() {
reqInfo := (&logger.ReqInfo{}).AppendTags("remoteAddr", bufconn.RemoteAddr().String()) reqInfo := (&logger.ReqInfo{}).AppendTags("remoteAddr", bufconn.RemoteAddr().String())
reqInfo.AppendTags("localAddr", bufconn.LocalAddr().String()) reqInfo.AppendTags("localAddr", bufconn.LocalAddr().String())
ctx := logger.SetReqInfo(context.Background(), reqInfo) ctx := logger.SetReqInfo(context.Background(), reqInfo)
logger.LogIf(ctx, fmt.Errorf("malformed HTTP invalid HTTP method %s", method)) err = fmt.Errorf("malformed HTTP invalid HTTP method %s", method)
logger.LogIf(ctx, err)
bufconn.Write([]byte(malformedErrMsgFn(err)))
bufconn.Close() bufconn.Close()
return return
} }

@ -657,11 +657,11 @@ func TestHTTPListenerAcceptError(t *testing.T) {
continue continue
} }
_, err = bufio.NewReader(conn).ReadString('\n') s, err := bufio.NewReader(conn).ReadString('\n')
if err == nil { if err != nil {
t.Errorf("Test %d: reply read: expected = EOF got = <nil>", i+1) t.Errorf("Test %d: reply read: expected = <nil>, got = %s", i+1, err)
} else if err.Error() != "EOF" { } else if !strings.Contains(s, "HTTP/1.0 400 Bad Request") {
t.Errorf("Test %d: reply read: expected = EOF got = %v", i+1, err) t.Errorf("Test %d: reply read: expected = 'HTTP/1.0 400 Bad Request' got = %s", i+1, s)
} }
conn.Close() conn.Close()

Loading…
Cancel
Save