summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMikhail Osipov <mikhail.osipov@kaspersky.com>2020-01-23 15:57:58 +0300
committerMikhail Osipov <mikhail.osipov@kaspersky.com>2020-01-23 17:16:37 +0300
commitab3e3860cbb836203ac707ea395af9902d29ad39 (patch)
tree7af5c308d372e1aaf48fb99fdfeeceec7366485a
parent3145a06d233dfdd4a70cfc706eaaae3abfb937db (diff)
check variable name
-rw-r--r--pkg/server/env.go34
1 files changed, 20 insertions, 14 deletions
diff --git a/pkg/server/env.go b/pkg/server/env.go
index 1c24f0b..7fc338d 100644
--- a/pkg/server/env.go
+++ b/pkg/server/env.go
@@ -1,15 +1,15 @@
package server
import (
+ "regexp"
"sync"
)
func init() {
- newCmd(envSet, "env", "set")
- newCmd(envGet, "env", "get")
- newCmd(envUnset, "env", "unset")
-
- newCmd(envShow, "show", "env")
+ newCmd(envGet, "env", "get")
+ newCmd(envSet, "env", "set")
+ newCmd(envDel, "env", "del")
+ newCmd(envShow, "env", "show")
}
type env struct {
@@ -17,6 +17,8 @@ type env struct {
sync.Mutex
}
+var isValidVarName = regexp.MustCompile("^[a-zA-Z][a-zA-Z0-9]*$").MatchString
+
func (e *env) get(key string) (string, bool) {
e.Lock()
defer e.Unlock()
@@ -37,7 +39,7 @@ func (e *env) set(key string, value string) {
e.m[key] = value
}
-func (e *env) unset(key string) bool {
+func (e *env) del(key string) bool {
e.Lock()
defer e.Unlock()
@@ -65,12 +67,6 @@ func (e *env) each(f func (string, string) bool) {
}
}
-func envSet(r *request) {
- r.expect(2)
-
- r.c.s.env.set(r.args[0], r.args[1])
-}
-
func envGet(r *request) {
r.expect(1)
@@ -81,10 +77,20 @@ func envGet(r *request) {
}
}
-func envUnset(r *request) {
+func envSet(r *request) {
+ r.expect(2)
+
+ if !isValidVarName(r.args[0]) {
+ r.Fatal("bad variable name")
+ }
+
+ r.c.s.env.set(r.args[0], r.args[1])
+}
+
+func envDel(r *request) {
r.expect(1)
- if !r.c.s.env.unset(r.args[0]) {
+ if !r.c.s.env.del(r.args[0]) {
r.Fatal("no such variable")
}
}