From bce05026fe73b9095ab082da2c204a79c15858e0 Mon Sep 17 00:00:00 2001 From: Trace Andreason Date: Sun, 21 Feb 2021 12:32:03 -0800 Subject: [PATCH 1/3] no periods in new contract names --- src/cmd/new.rs | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/src/cmd/new.rs b/src/cmd/new.rs index f294e3cf..b7412347 100644 --- a/src/cmd/new.rs +++ b/src/cmd/new.rs @@ -27,6 +27,10 @@ pub(crate) fn execute

(name: &str, dir: Option

) -> Result> where P: AsRef, { + if name.contains('.') { + anyhow::bail!("Contract names cannot contain periods"); + } + if name.contains('-') { anyhow::bail!("Contract names cannot contain hyphens"); } @@ -114,6 +118,19 @@ mod tests { }) } + #[test] + fn rejects_name_with_period() { + with_tmp_dir(|path| { + let result = execute("../xxx", Some(path)); + assert!(result.is_err(), "Should fail"); + assert_eq!( + result.err().unwrap().to_string(), + "Contract names cannot contain periods" + ); + Ok(()) + }) + } + #[test] fn contract_cargo_project_already_exists() { with_tmp_dir(|path| { -- GitLab From 68c37e69bbb54aad8f7ab4880f0d9ae657b189b6 Mon Sep 17 00:00:00 2001 From: Trace Andreason Date: Tue, 23 Feb 2021 08:59:49 -0800 Subject: [PATCH 2/3] test for valid characters --- src/cmd/new.rs | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/cmd/new.rs b/src/cmd/new.rs index b7412347..43b8c71d 100644 --- a/src/cmd/new.rs +++ b/src/cmd/new.rs @@ -27,12 +27,8 @@ pub(crate) fn execute

(name: &str, dir: Option

) -> Result> where P: AsRef, { - if name.contains('.') { - anyhow::bail!("Contract names cannot contain periods"); - } - - if name.contains('-') { - anyhow::bail!("Contract names cannot contain hyphens"); + if !name.replace('_', "").chars().all(char::is_alphanumeric) { + anyhow::bail!("Contract names can only contain alphanumeric characters and underscores"); } let out_dir = dir @@ -112,7 +108,7 @@ mod tests { assert!(result.is_err(), "Should fail"); assert_eq!( result.err().unwrap().to_string(), - "Contract names cannot contain hyphens" + "Contract names can only contain alphanumeric characters and underscores" ); Ok(()) }) @@ -125,7 +121,7 @@ mod tests { assert!(result.is_err(), "Should fail"); assert_eq!( result.err().unwrap().to_string(), - "Contract names cannot contain periods" + "Contract names can only contain alphanumeric characters and underscores" ); Ok(()) }) -- GitLab From a53e9e60aa59ab6c847c1e15aff36021b26d421b Mon Sep 17 00:00:00 2001 From: Trace Andreason Date: Tue, 23 Feb 2021 09:40:53 -0800 Subject: [PATCH 3/3] more readable iterator --- src/cmd/new.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cmd/new.rs b/src/cmd/new.rs index 43b8c71d..5c23574b 100644 --- a/src/cmd/new.rs +++ b/src/cmd/new.rs @@ -27,7 +27,7 @@ pub(crate) fn execute

(name: &str, dir: Option

) -> Result> where P: AsRef, { - if !name.replace('_', "").chars().all(char::is_alphanumeric) { + if !name.chars().all(|c| c.is_alphanumeric() || c == '_') { anyhow::bail!("Contract names can only contain alphanumeric characters and underscores"); } -- GitLab