@@ -349,9 +349,9 @@ impl HttpRequest {
349349 let mut cookies = Vec :: new ( ) ;
350350 for hdr in self . headers ( ) . get_all ( COOKIE ) {
351351 let s = str:: from_utf8 ( hdr. as_bytes ( ) ) . map_err ( CookieParseError :: from) ?;
352- for cookie_str in s. split ( ';' ) . map ( |s| s. trim ( ) ) {
353- if !cookie_str . is_empty ( ) {
354- cookies. push ( Cookie :: parse_encoded ( cookie_str ) ? . into_owned ( ) ) ;
352+ for cookie_str in s. split ( ';' ) . map ( |s| s. trim ( ) ) . filter ( |s| !s . is_empty ( ) ) {
353+ if let Ok ( cookie ) = Cookie :: parse_encoded ( cookie_str ) {
354+ cookies. push ( cookie . into_owned ( ) ) ;
355355 }
356356 }
357357 }
@@ -602,6 +602,22 @@ mod tests {
602602 assert ! ( cookie. is_none( ) ) ;
603603 }
604604
605+ #[ test]
606+ #[ cfg( feature = "cookies" ) ]
607+ fn test_empty_key ( ) {
608+ let req = TestRequest :: default ( )
609+ . append_header ( ( header:: COOKIE , "cookie1=value1; value2; cookie3=value3" ) )
610+ . to_http_request ( ) ;
611+ {
612+ let cookies = req. cookies ( ) . unwrap ( ) ;
613+ assert_eq ! ( cookies. len( ) , 2 ) ;
614+ assert_eq ! ( cookies[ 0 ] . name( ) , "cookie1" ) ;
615+ assert_eq ! ( cookies[ 0 ] . value( ) , "value1" ) ;
616+ assert_eq ! ( cookies[ 1 ] . name( ) , "cookie3" ) ;
617+ assert_eq ! ( cookies[ 1 ] . value( ) , "value3" ) ;
618+ }
619+ }
620+
605621 #[ test]
606622 fn test_request_query ( ) {
607623 let req = TestRequest :: with_uri ( "/?id=test" ) . to_http_request ( ) ;
0 commit comments