@@ -2214,6 +2214,63 @@ mod conn {
2214
2214
future:: join ( server, client) . await ;
2215
2215
}
2216
2216
2217
+ #[ tokio:: test]
2218
+ async fn get_obsolete_line_folding ( ) {
2219
+ let _ = :: pretty_env_logger:: try_init ( ) ;
2220
+ let listener = TkTcpListener :: bind ( SocketAddr :: from ( ( [ 127 , 0 , 0 , 1 ] , 0 ) ) )
2221
+ . await
2222
+ . unwrap ( ) ;
2223
+ let addr = listener. local_addr ( ) . unwrap ( ) ;
2224
+
2225
+ let server = async move {
2226
+ let mut sock = listener. accept ( ) . await . unwrap ( ) . 0 ;
2227
+ let mut buf = [ 0 ; 4096 ] ;
2228
+ let n = sock. read ( & mut buf) . await . expect ( "read 1" ) ;
2229
+
2230
+ // Notably:
2231
+ // - Just a path, since just a path was set
2232
+ // - No host, since no host was set
2233
+ let expected = "GET /a HTTP/1.1\r \n \r \n " ;
2234
+ assert_eq ! ( s( & buf[ ..n] ) , expected) ;
2235
+
2236
+ sock. write_all ( b"HTTP/1.1 200 OK\r \n Content-Length: \r \n 0\r \n Line-Folded-Header: hello\r \n world \r \n \r \n \r \n " )
2237
+ . await
2238
+ . unwrap ( ) ;
2239
+ } ;
2240
+
2241
+ let client = async move {
2242
+ let tcp = tcp_connect ( & addr) . await . expect ( "connect" ) ;
2243
+ let ( mut client, conn) = conn:: Builder :: new ( )
2244
+ . http1_allow_obsolete_multiline_headers_in_responses ( true )
2245
+ . handshake :: < _ , Body > ( tcp)
2246
+ . await
2247
+ . expect ( "handshake" ) ;
2248
+
2249
+ tokio:: task:: spawn ( async move {
2250
+ conn. await . expect ( "http conn" ) ;
2251
+ } ) ;
2252
+
2253
+ let req = Request :: builder ( )
2254
+ . uri ( "/a" )
2255
+ . body ( Default :: default ( ) )
2256
+ . unwrap ( ) ;
2257
+ let mut res = client. send_request ( req) . await . expect ( "send_request" ) ;
2258
+ assert_eq ! ( res. status( ) , hyper:: StatusCode :: OK ) ;
2259
+ assert_eq ! ( res. headers( ) . len( ) , 2 ) ;
2260
+ assert_eq ! (
2261
+ res. headers( ) . get( http:: header:: CONTENT_LENGTH ) . unwrap( ) ,
2262
+ "0"
2263
+ ) ;
2264
+ assert_eq ! (
2265
+ res. headers( ) . get( "line-folded-header" ) . unwrap( ) ,
2266
+ "hello world"
2267
+ ) ;
2268
+ assert ! ( res. body_mut( ) . next( ) . await . is_none( ) ) ;
2269
+ } ;
2270
+
2271
+ future:: join ( server, client) . await ;
2272
+ }
2273
+
2217
2274
#[ test]
2218
2275
fn incoming_content_length ( ) {
2219
2276
use hyper:: body:: HttpBody ;
0 commit comments