]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: check for invalid characters in Setenv on Unix
authorPéter Surányi <speter.go1@gmail.com>
Fri, 8 Feb 2013 18:45:46 +0000 (10:45 -0800)
committerIan Lance Taylor <iant@golang.org>
Fri, 8 Feb 2013 18:45:46 +0000 (10:45 -0800)
On POSIX, '=' in key is explicitly invalid, and '\x00' in key/value is implicitly invalid.

R=golang-dev, iant, bradfitz
CC=golang-dev
https://golang.org/cl/7311061

src/pkg/os/env_unix_test.go [new file with mode: 0644]
src/pkg/syscall/env_unix.go

diff --git a/src/pkg/os/env_unix_test.go b/src/pkg/os/env_unix_test.go
new file mode 100644 (file)
index 0000000..7eb4dc0
--- /dev/null
@@ -0,0 +1,30 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build darwin freebsd linux netbsd openbsd
+
+package os_test
+
+import (
+       . "os"
+       "testing"
+)
+
+var setenvEinvalTests = []struct {
+       k, v string
+}{
+       {"", ""},      // empty key
+       {"k=v", ""},   // '=' in key
+       {"\x00", ""},  // '\x00' in key
+       {"k", "\x00"}, // '\x00' in value
+}
+
+func TestSetenvUnixEinval(t *testing.T) {
+       for _, tt := range setenvEinvalTests {
+               err := Setenv(tt.k, tt.v)
+               if err == nil {
+                       t.Errorf(`Setenv(%q, %q) == nil, want error`, tt.k, tt.v)
+               }
+       }
+}
index 8b1868c271af93bb0fe6d1ba7b87ab678fa62af2..8573d79c78a84ce51664180ad8a32836fdc972d0 100644 (file)
@@ -71,6 +71,16 @@ func Setenv(key, value string) error {
        if len(key) == 0 {
                return EINVAL
        }
+       for i := 0; i < len(key); i++ {
+               if key[i] == '=' || key[i] == 0 {
+                       return EINVAL
+               }
+       }
+       for i := 0; i < len(value); i++ {
+               if value[i] == 0 {
+                       return EINVAL
+               }
+       }
 
        envLock.Lock()
        defer envLock.Unlock()