From f82b5ddb66a5f2adf796ef3e317805fe26305887 Mon Sep 17 00:00:00 2001 From: cushonz Date: Mon, 23 Jan 2023 21:06:35 -0800 Subject: [PATCH 1/3] Added regex based input validation when creating a new sketch --- internal/cli/sketch/new.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/internal/cli/sketch/new.go b/internal/cli/sketch/new.go index 3b361f3d8ea..0b29befd168 100644 --- a/internal/cli/sketch/new.go +++ b/internal/cli/sketch/new.go @@ -19,7 +19,8 @@ import ( "context" "os" "strings" - + "regexp" + "fmt" "github.com/arduino/arduino-cli/arduino/globals" sk "github.com/arduino/arduino-cli/commands/sketch" "github.com/arduino/arduino-cli/internal/cli/feedback" @@ -38,7 +39,14 @@ func initNewCommand() *cobra.Command { Long: tr("Create a new Sketch"), Example: " " + os.Args[0] + " sketch new MultiBlinker", Args: cobra.ExactArgs(1), - Run: func(cmd *cobra.Command, args []string) { runNewCommand(args, overwrite) }, + Run: func(cmd *cobra.Command, args []string) { + re := regexp.MustCompile("^[a-zA-Z].") + if !re.MatchString(args[0]) { + fmt.Println("Error: Value can only contain alphabetic characters") + return + } + runNewCommand(args, overwrite) + }, } newCommand.Flags().BoolVarP(&overwrite, "overwrite", "f", false, tr("Overwrites an existing .ino sketch.")) From 90e2cde5b04d3b76424ae1e57bbeabfdec411657 Mon Sep 17 00:00:00 2001 From: cushonz Date: Tue, 24 Jan 2023 00:34:46 -0800 Subject: [PATCH 2/3] Fixed regular expression and error message --- internal/cli/sketch/new.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/cli/sketch/new.go b/internal/cli/sketch/new.go index 0b29befd168..9e2513bf2c1 100644 --- a/internal/cli/sketch/new.go +++ b/internal/cli/sketch/new.go @@ -40,9 +40,9 @@ func initNewCommand() *cobra.Command { Example: " " + os.Args[0] + " sketch new MultiBlinker", Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { - re := regexp.MustCompile("^[a-zA-Z].") + re := regexp.MustCompile("^[0-9a-zA-Z][0-9a-zA-Z_.-]{0,62}$") if !re.MatchString(args[0]) { - fmt.Println("Error: Value can only contain alphabetic characters") + fmt.Println("Sketch names must start with a letter or number, followed by letters, numbers, dashes, dots and underscores. Maximum length is 63 characters.") return } runNewCommand(args, overwrite) From e2806b783e70f4040e45c7d58e884dca7c06b529 Mon Sep 17 00:00:00 2001 From: cushonz Date: Tue, 24 Jan 2023 01:09:08 -0800 Subject: [PATCH 3/3] slash support --- internal/cli/sketch/new.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/cli/sketch/new.go b/internal/cli/sketch/new.go index 9e2513bf2c1..293293b75ec 100644 --- a/internal/cli/sketch/new.go +++ b/internal/cli/sketch/new.go @@ -40,7 +40,7 @@ func initNewCommand() *cobra.Command { Example: " " + os.Args[0] + " sketch new MultiBlinker", Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { - re := regexp.MustCompile("^[0-9a-zA-Z][0-9a-zA-Z_.-]{0,62}$") + re := regexp.MustCompile("^/[0-9a-zA-Z][0-9a-zA-Z_.-]{0,62}$") if !re.MatchString(args[0]) { fmt.Println("Sketch names must start with a letter or number, followed by letters, numbers, dashes, dots and underscores. Maximum length is 63 characters.") return