From 3dafd2c6908f19d573a94b8fc1e99b58460453a8 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Fri, 27 Oct 2017 23:09:10 +0200 Subject: [PATCH] Encode urls --- src/librustdoc/html/render.rs | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/librustdoc/html/render.rs b/src/librustdoc/html/render.rs index bdcfa782bb7..8aad4d301ee 100644 --- a/src/librustdoc/html/render.rs +++ b/src/librustdoc/html/render.rs @@ -3525,6 +3525,21 @@ fn get_methods(i: &clean::Impl) -> Vec { }).collect::>() } +// The point is to url encode any potential character from a type with genericity. +fn small_url_encode(s: &str) -> String { + s.replace("<", "%3C") + .replace(">", "%3E") + .replace(" ", "%20") + .replace("?", "%3F") + .replace("'", "%27") + .replace("&", "%26") + .replace(",", "%2C") + .replace(":", "%3A") + .replace(";", "%3B") + .replace("[", "%5B") + .replace("]", "%5D") +} + fn sidebar_assoc_items(it: &clean::Item) -> String { let mut out = String::new(); let c = cache(); @@ -3568,7 +3583,8 @@ fn sidebar_assoc_items(it: &clean::Item) -> String { let ret = v.iter() .filter_map(|i| if let Some(ref i) = i.inner_impl().trait_ { let out = format!("{:#}", i).replace("<", "<").replace(">", ">"); - Some(format!("{}", i, out)) + let encoded = small_url_encode(&format!("{:#}", i)); + Some(format!("{}", encoded, out)) } else { None })