File tree Expand file tree Collapse file tree 1 file changed +24
-9
lines changed Expand file tree Collapse file tree 1 file changed +24
-9
lines changed Original file line number Diff line number Diff line change @@ -388,16 +388,13 @@ pub fn badge_handler(req: &mut Request) -> IronResult<Response> {
388388 }
389389 }
390390 MatchVersion :: Semver ( ( version, _) ) => {
391- let url = ctry ! ( Url :: parse(
392- & format!(
393- "{}/{}/badge.svg?version={}" ,
394- redirect_base( req) ,
395- name,
396- version
397- ) [ ..]
391+ let base_url = format ! ( "{}/{}/badge.svg" , redirect_base( req) , name) ;
392+ let url = ctry ! ( url:: Url :: parse_with_params(
393+ & base_url,
394+ & [ ( "version" , version) ]
398395 ) ) ;
399-
400- return Ok ( super :: redirect ( url ) ) ;
396+ let iron_url = ctry ! ( Url :: from_generic_url ( url ) ) ;
397+ return Ok ( super :: redirect ( iron_url ) ) ;
401398 }
402399 MatchVersion :: None => BadgeOptions {
403400 subject : "docs" . to_owned ( ) ,
@@ -651,4 +648,22 @@ mod test {
651648 Ok ( ( ) )
652649 } )
653650 }
651+ #[ test]
652+ fn badges_are_urlencoded ( ) {
653+ wrapper ( |env| {
654+ let db = env. db ( ) ;
655+ db. fake_release ( )
656+ . name ( "zstd" )
657+ . version ( "0.5.1+zstd.1.4.4" )
658+ . create ( ) ?;
659+
660+ let frontend = env. frontend ( ) ;
661+ assert_redirect (
662+ "/zstd/badge.svg" ,
663+ "/zstd/badge.svg?version=0.5.1%2Bzstd.1.4.4" ,
664+ & frontend,
665+ ) ?;
666+ Ok ( ( ) )
667+ } )
668+ }
654669}
You can’t perform that action at this time.
0 commit comments