From 0e311eeb96e020427752bf7ac875630812b9a7d6 Mon Sep 17 00:00:00 2001 From: Andrew Jones Date: Mon, 8 Mar 2021 09:43:41 +0000 Subject: [PATCH 1/3] Only allow contract names beginning with an alphabetic character --- src/cmd/new.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/cmd/new.rs b/src/cmd/new.rs index 5c23574b..b6554e84 100644 --- a/src/cmd/new.rs +++ b/src/cmd/new.rs @@ -31,6 +31,10 @@ where anyhow::bail!("Contract names can only contain alphanumeric characters and underscores"); } + if !name.chars().next().map(|c| c.is_alphabetic()).unwrap_or(false) { + anyhow::bail!("Contract names must begin with an alphabetic character"); + } + let out_dir = dir .map_or(env::current_dir()?, |p| p.as_ref().to_path_buf()) .join(name); -- GitLab From bee77e9242a3578c5b147302381ad25da8008ae7 Mon Sep 17 00:00:00 2001 From: Andrew Jones Date: Mon, 8 Mar 2021 09:46:17 +0000 Subject: [PATCH 2/3] Add test for contract name beginning with a number --- src/cmd/new.rs | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/cmd/new.rs b/src/cmd/new.rs index b6554e84..888bb98e 100644 --- a/src/cmd/new.rs +++ b/src/cmd/new.rs @@ -131,6 +131,19 @@ mod tests { }) } + #[test] + fn rejects_name_beginning_with_number() { + with_tmp_dir(|path| { + let result = execute("1xxx", Some(path)); + assert!(result.is_err(), "Should fail"); + assert_eq!( + result.err().unwrap().to_string(), + "Contract names must begin with an alphabetic character" + ); + Ok(()) + }) + } + #[test] fn contract_cargo_project_already_exists() { with_tmp_dir(|path| { -- GitLab From 723c5953820482c11e1b6409a8c878a31ffce0b4 Mon Sep 17 00:00:00 2001 From: Andrew Jones Date: Tue, 9 Mar 2021 10:51:37 +0000 Subject: [PATCH 3/3] Add test for contract name beginning with a number --- src/cmd/new.rs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/cmd/new.rs b/src/cmd/new.rs index 888bb98e..3c88c5b2 100644 --- a/src/cmd/new.rs +++ b/src/cmd/new.rs @@ -31,7 +31,12 @@ where anyhow::bail!("Contract names can only contain alphanumeric characters and underscores"); } - if !name.chars().next().map(|c| c.is_alphabetic()).unwrap_or(false) { + if !name + .chars() + .next() + .map(|c| c.is_alphabetic()) + .unwrap_or(false) + { anyhow::bail!("Contract names must begin with an alphabetic character"); } -- GitLab