diff options
author | Kornel <kornel@geekhood.net> | 2020-03-08 13:10:24 +0000 |
---|---|---|
committer | Kornel <kornel@geekhood.net> | 2020-03-08 15:28:59 +0000 |
commit | b0b1436e5e8ffa48f7fa2c4c030d827591420854 (patch) | |
tree | 8ac72071bc3a93700470fdae3134f2b882816707 | |
parent | 4c0cee6a6a86eb81d9a38ba014694e0665766e3c (diff) |
Avoid creating invalid origin objs
-rw-r--r-- | server/src/main.rs | 26 |
1 files changed, 18 insertions, 8 deletions
diff --git a/server/src/main.rs b/server/src/main.rs index e3e47a8..cfe6c44 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -263,22 +263,32 @@ async fn default_handler(req: HttpRequest) -> Result<HttpResponse, ServerError> let name = path.trim_matches('/').to_owned(); let crates = state.crates.load(); let (found_crate, found_keyword) = rt_run_timeout(&state.rt, 10, async move { - match crates.rich_crate_async(&Origin::from_crates_io_name(&name)).await { - Ok(c) => Ok((Some(c), None)), - Err(_) => { + let crate_maybe = if is_alnum(&name) { + crates.rich_crate_async(&Origin::from_crates_io_name(&name)).await.ok() + } else { + None + }; + match crate_maybe { + Some(c) => Ok((Some(c), None)), + None => { let inverted_hyphens: String = name.chars().map(|c| if c == '-' {'_'} else if c == '_' {'-'} else {c.to_ascii_lowercase()}).collect(); - match crates.rich_crate_async(&Origin::from_crates_io_name(&inverted_hyphens)).await { - Ok(c) => Ok((Some(c), None)), - Err(_) => { + let crate_maybe = if is_alnum(&name) { + crates.rich_crate_async(&Origin::from_crates_io_name(&inverted_hyphens)).await.ok() + } else { + None + }; + match crate_maybe { + Some(c) => Ok((Some(c), None)), + None => { if crates.is_it_a_keyword(&inverted_hyphens).await { Ok((None, Some(inverted_hyphens))) } else { Ok((None, None)) } }, - } - }, } + }, + } }).await?; if let Some(k) = found_crate { |