@@ -35,8 +35,9 @@ void loop() {
35
35
}
36
36
` )
37
37
38
- var sketchNameValidationRegex = regexp . MustCompile ( `^([A-Za-z\d]+[_.-]*)+$` )
38
+ // sketchNameMaxLength could be part of the regex, but it's intentionally left out for clearer error reporting
39
39
var sketchNameMaxLength = 63
40
+ var sketchNameValidationRegex = regexp .MustCompile (`^[0-9a-zA-Z]{1}[0-9a-zA-Z_\.-]*$` )
40
41
41
42
// NewSketch creates a new sketch via gRPC
42
43
func NewSketch (ctx context.Context , req * rpc.NewSketchRequest ) (* rpc.NewSketchResponse , error ) {
@@ -47,16 +48,8 @@ func NewSketch(ctx context.Context, req *rpc.NewSketchRequest) (*rpc.NewSketchRe
47
48
sketchesDir = configuration .Settings .GetString ("directories.User" )
48
49
}
49
50
50
- if len (req .SketchName ) > sketchNameMaxLength {
51
- return nil , & arduino.CantCreateSketchError {Cause : errors .New (tr ("sketch name too long (%d characters). Maximum allowed length is %d" ,
52
- len (req .SketchName ),
53
- sketchNameMaxLength ))}
54
- }
55
-
56
- if ! sketchNameValidationRegex .MatchString (req .SketchName ) {
57
- return nil , & arduino.CantCreateSketchError {Cause : errors .New (tr ("invalid sketch name \" %s\" . Required pattern %s" ,
58
- req .SketchName ,
59
- sketchNameValidationRegex .String ()))}
51
+ if err := validateSketchName (req .SketchName ); err != nil {
52
+ return nil , err
60
53
}
61
54
62
55
sketchDirPath := paths .New (sketchesDir ).Join (req .SketchName )
@@ -76,3 +69,18 @@ func NewSketch(ctx context.Context, req *rpc.NewSketchRequest) (*rpc.NewSketchRe
76
69
77
70
return & rpc.NewSketchResponse {MainFile : sketchMainFilePath .String ()}, nil
78
71
}
72
+
73
+ func validateSketchName (name string ) error {
74
+ if len (name ) > sketchNameMaxLength {
75
+ return & arduino.CantCreateSketchError {Cause : errors .New (tr ("sketch name too long (%d characters). Maximum allowed length is %d" ,
76
+ len (name ),
77
+ sketchNameMaxLength ))}
78
+ }
79
+
80
+ if ! sketchNameValidationRegex .MatchString (name ) {
81
+ return & arduino.CantCreateSketchError {Cause : errors .New (tr ("invalid sketch name \" %s\" . Required pattern %s" ,
82
+ name ,
83
+ sketchNameValidationRegex .String ()))}
84
+ }
85
+ return nil
86
+ }
0 commit comments