]> Cypherpunks repositories - gostls13.git/commitdiff
syscall: allow empty string argument to SetsockoptString
authorTobias Klauser <tklauser@distanz.ch>
Fri, 5 Apr 2019 15:10:40 +0000 (17:10 +0200)
committerTobias Klauser <tobias.klauser@gmail.com>
Fri, 5 Apr 2019 15:42:17 +0000 (15:42 +0000)
Don't panic with "index out of range" on empty string argument.

Fixes golang/go#31277

Change-Id: I005f9523caec76337cb2ec87272a6be4736bce18
Reviewed-on: https://go-review.googlesource.com/c/go/+/170937
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
src/syscall/syscall_unix.go
src/syscall/syscall_unix_test.go

index fd54dc0dc769e7875e62087554eb84c81440d215..f73f55462af74828d6db7db5617d3c5b9afda83a 100644 (file)
@@ -323,7 +323,11 @@ func SetsockoptLinger(fd, level, opt int, l *Linger) (err error) {
 }
 
 func SetsockoptString(fd, level, opt int, s string) (err error) {
-       return setsockopt(fd, level, opt, unsafe.Pointer(&[]byte(s)[0]), uintptr(len(s)))
+       var p unsafe.Pointer
+       if len(s) > 0 {
+               p = unsafe.Pointer(&[]byte(s)[0])
+       }
+       return setsockopt(fd, level, opt, p, uintptr(len(s)))
 }
 
 func SetsockoptTimeval(fd, level, opt int, tv *Timeval) (err error) {
index 085afb29411218d1586ec94b5d1081b83383dfca..1a2c41dacd9b6b03362ba146c73cbe2f231dcb63 100644 (file)
@@ -355,3 +355,11 @@ func TestSeekFailure(t *testing.T) {
                t.Fatalf("Seek(-1, 0, 0) return error with empty message")
        }
 }
+
+func TestSetsockoptString(t *testing.T) {
+       // should not panic on empty string, see issue #31277
+       err := syscall.SetsockoptString(-1, 0, 0, "")
+       if err == nil {
+               t.Fatalf("SetsockoptString: did not fail")
+       }
+}