@@ -2214,6 +2214,63 @@ mod conn {
22142214 future:: join ( server, client) . await ;
22152215 }
22162216
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+
22172274 #[ test]
22182275 fn incoming_content_length ( ) {
22192276 use hyper:: body:: HttpBody ;
0 commit comments