@@ -52,6 +52,28 @@ public void ParsesRequestLine(
5252 Assert . True ( buffer . Slice ( examined ) . IsEmpty ) ;
5353 }
5454
55+ [ Fact ]
56+ public void ParsesRequestLineWithTrailingSpace ( )
57+ {
58+ var parser = CreateParser ( _nullTrace , allowSpaceAfterRequestLine : true ) ;
59+ var buffer = new ReadOnlySequence < byte > ( Encoding . ASCII . GetBytes ( "GET / HTTP/1.1\r \n " ) ) ;
60+ var requestHandler = new RequestHandler ( ) ;
61+
62+ Assert . False ( ParseRequestLine ( parser , requestHandler , buffer . Slice ( 0 , buffer . Length - 1 ) , out var consumed , out var examined ) ) ;
63+ Assert . True ( buffer . Slice ( 0 , consumed ) . IsEmpty ) ;
64+ Assert . Equal ( buffer . Length - 1 , buffer . Slice ( 0 , examined ) . Length ) ;
65+
66+ Assert . True ( ParseRequestLine ( parser , requestHandler , buffer , out consumed , out examined ) ) ;
67+ Assert . True ( buffer . Slice ( consumed ) . IsEmpty ) ;
68+ Assert . True ( buffer . Slice ( examined ) . IsEmpty ) ;
69+
70+ Assert . Equal ( HttpMethods . Get , requestHandler . Method ) ;
71+ Assert . Equal ( "HTTP/1.1" , requestHandler . Version ) ;
72+ Assert . Equal ( "/" , requestHandler . RawTarget ) ;
73+ Assert . Equal ( "/" , requestHandler . RawPath ) ;
74+ Assert . Equal ( "HTTP/1.1" , requestHandler . Version ) ;
75+ }
76+
5577 [ Theory ]
5678 [ MemberData ( nameof ( RequestLineIncompleteData ) ) ]
5779 public void ParseRequestLineReturnsFalseWhenGivenIncompleteRequestLines ( string requestLine )
@@ -536,7 +558,8 @@ private void VerifyRawHeaders(string rawHeaders, IEnumerable<string> expectedHea
536558 Assert . True ( buffer . Slice ( reader . Position ) . IsEmpty ) ;
537559 }
538560
539- private IHttpParser < RequestHandler > CreateParser ( IKestrelTrace log ) => new HttpParser < RequestHandler > ( log . IsEnabled ( LogLevel . Information ) ) ;
561+ private IHttpParser < RequestHandler > CreateParser ( IKestrelTrace log , bool allowSpaceAfterRequestLine = false )
562+ => new HttpParser < RequestHandler > ( log . IsEnabled ( LogLevel . Information ) , allowSpaceAfterRequestLine ) ;
540563
541564 public static IEnumerable < object [ ] > RequestLineValidData => HttpParsingData . RequestLineValidData ;
542565
0 commit comments