From 2f3e356ef05596ab03a8b6a58af41523386a4f14 Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Tue, 23 Mar 2021 15:06:03 -0400 Subject: [PATCH 1/2] Use Path's logic for file extensions instead of rewriting it This avoids bugs when files are named `svg`, without an extension. --- src/web/rustdoc.rs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/src/web/rustdoc.rs b/src/web/rustdoc.rs index 828062f40..25015cd76 100644 --- a/src/web/rustdoc.rs +++ b/src/web/rustdoc.rs @@ -18,6 +18,7 @@ use iron::{ use lol_html::errors::RewritingError; use router::Router; use serde::Serialize; +use std::path::Path; #[derive(Clone)] pub struct RustLangRedirector { @@ -644,13 +645,14 @@ impl Handler for SharedResourceHandler { fn handle(&self, req: &mut Request) -> IronResult { let path = req.url.path(); let filename = path.last().unwrap(); // unwrap is fine: vector is non-empty - let suffix = filename.split('.').last().unwrap(); // unwrap is fine: split always works - if ["js", "css", "woff", "svg"].contains(&suffix) { - let storage = extension!(req, Storage); - let config = extension!(req, Config); + if let Some(extension) = Path::new(filename).extension() { + if ["js", "css", "woff", "svg"].iter().any(|s| *s == extension) { + let storage = extension!(req, Storage); + let config = extension!(req, Config); - if let Ok(file) = File::from_path(&storage, filename, &config) { - return Ok(file.serve()); + if let Ok(file) = File::from_path(&storage, filename, &config) { + return Ok(file.serve()); + } } } From ac37c2c8ad0d703f218382361a519a82263c1263 Mon Sep 17 00:00:00 2001 From: Joshua Nelson Date: Tue, 23 Mar 2021 15:06:50 -0400 Subject: [PATCH 2/2] Count .png and .woff2 as shared files These used to be served by the database handler. Now that it no longer exists, handle them in the shared resource handler directly. --- src/web/rustdoc.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/web/rustdoc.rs b/src/web/rustdoc.rs index 25015cd76..918ea91e2 100644 --- a/src/web/rustdoc.rs +++ b/src/web/rustdoc.rs @@ -646,7 +646,10 @@ impl Handler for SharedResourceHandler { let path = req.url.path(); let filename = path.last().unwrap(); // unwrap is fine: vector is non-empty if let Some(extension) = Path::new(filename).extension() { - if ["js", "css", "woff", "svg"].iter().any(|s| *s == extension) { + if ["js", "css", "woff", "woff2", "svg", "png"] + .iter() + .any(|s| *s == extension) + { let storage = extension!(req, Storage); let config = extension!(req, Config);