summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKornel <kornel@geekhood.net>2020-03-08 13:10:24 +0000
committerKornel <kornel@geekhood.net>2020-03-08 15:28:59 +0000
commitb0b1436e5e8ffa48f7fa2c4c030d827591420854 (patch)
tree8ac72071bc3a93700470fdae3134f2b882816707
parent4c0cee6a6a86eb81d9a38ba014694e0665766e3c (diff)
Avoid creating invalid origin objs
-rw-r--r--server/src/main.rs26
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 {