@@ -52,6 +52,28 @@ public void ParsesRequestLine(
52
52
Assert . True ( buffer . Slice ( examined ) . IsEmpty ) ;
53
53
}
54
54
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
+
55
77
[ Theory ]
56
78
[ MemberData ( nameof ( RequestLineIncompleteData ) ) ]
57
79
public void ParseRequestLineReturnsFalseWhenGivenIncompleteRequestLines ( string requestLine )
@@ -536,7 +558,8 @@ private void VerifyRawHeaders(string rawHeaders, IEnumerable<string> expectedHea
536
558
Assert . True ( buffer . Slice ( reader . Position ) . IsEmpty ) ;
537
559
}
538
560
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 ) ;
540
563
541
564
public static IEnumerable < object [ ] > RequestLineValidData => HttpParsingData . RequestLineValidData ;
542
565
0 commit comments