File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -309,13 +309,13 @@ fn get_authority(rawurl: &str) ->
309309 colon_count = 0 ; // reset count
310310 match st {
311311 State :: Start => {
312- let user = rawurl[ begin..i] . to_string ( ) ;
312+ let user = try! ( decode_component ( & rawurl[ begin..i] ) ) ;
313313 userinfo = Some ( UserInfo :: new ( user, None ) ) ;
314314 st = State :: InHost ;
315315 }
316316 State :: PassHostPort => {
317- let user = rawurl[ begin..pos] . to_string ( ) ;
318- let pass = rawurl[ pos+1 ..i] . to_string ( ) ;
317+ let user = try! ( decode_component ( & rawurl[ begin..pos] ) ) ;
318+ let pass = try! ( decode_component ( & rawurl[ pos+1 ..i] ) ) ;
319319 userinfo = Some ( UserInfo :: new ( user, Some ( pass) ) ) ;
320320 st = State :: InHost ;
321321 }
Original file line number Diff line number Diff line change @@ -17,6 +17,7 @@ use postgres::{HandleNotice,
1717 Error ,
1818 ConnectError ,
1919 DbError ,
20+ IntoConnectParams ,
2021 VecStreamIterator } ;
2122use postgres:: SqlState :: { SyntaxError ,
2223 QueryCanceled ,
@@ -936,3 +937,10 @@ fn test_get_opt_wrong_type() {
936937 Err ( e) => panic ! ( "unexpected error {}" , e) ,
937938 }
938939}
940+
941+ #[ test]
942+ fn url_encoded_password ( ) {
943+ let params = "postgresql://username%7b%7c:password%7b%7c@localhost" . into_connect_params ( ) . unwrap ( ) ;
944+ assert_eq ! ( "username{|" , & params. user. as_ref( ) . unwrap( ) . user[ ..] ) ;
945+ assert_eq ! ( "password{|" , & params. user. as_ref( ) . unwrap( ) . password. as_ref( ) . unwrap( ) [ ..] ) ;
946+ }
You can’t perform that action at this time.
0 commit comments