From ab3e3860cbb836203ac707ea395af9902d29ad39 Mon Sep 17 00:00:00 2001 From: Mikhail Osipov Date: Thu, 23 Jan 2020 15:57:58 +0300 Subject: check variable name --- pkg/server/env.go | 34 ++++++++++++++++++++-------------- 1 file changed, 20 insertions(+), 14 deletions(-) (limited to 'pkg') 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") } } -- cgit v1.2.3-70-g09d2