@@ -543,6 +543,43 @@ func TestTarget_EnforceMaxBodySizes(t *testing.T) {
543543 })
544544}
545545
546+ func TestTarget_MalformedChunkedEncodingWithoutBuffering (t * testing.T ) {
547+ targetOptions := TargetOptions {
548+ BufferRequests : false ,
549+ HealthCheckConfig : defaultHealthCheckConfig ,
550+ }
551+
552+ target := testTargetWithOptions (t , targetOptions , func (w http.ResponseWriter , r * http.Request ) {
553+ w .Write ([]byte ("ok" ))
554+ })
555+
556+ server := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
557+ r , err := target .StartRequest (r )
558+ require .NoError (t , err )
559+ target .SendRequest (w , r )
560+ }))
561+ t .Cleanup (server .Close )
562+
563+ conn , err := net .Dial ("tcp" , server .Listener .Addr ().String ())
564+ require .NoError (t , err )
565+ defer conn .Close ()
566+
567+ rawRequest := "POST / HTTP/1.1\r \n " +
568+ "Host: example.com\r \n " +
569+ "Transfer-Encoding: chunked\r \n " +
570+ "\r \n " +
571+ "ZZ\r \n "
572+
573+ _ , err = conn .Write ([]byte (rawRequest ))
574+ require .NoError (t , err )
575+
576+ resp , err := http .ReadResponse (bufio .NewReader (conn ), nil )
577+ require .NoError (t , err )
578+ defer resp .Body .Close ()
579+
580+ assert .Equal (t , http .StatusBadRequest , resp .StatusCode )
581+ }
582+
546583func TestTarget_buildHealthCheckURL (t * testing.T ) {
547584 tests := []struct {
548585 name string
0 commit comments