소스 검색

unix: allow empty string argument to SetsockoptString

Don't panic with "index out of range" on empty string argument.

Follows CL 170937 which did the sane for package syscall.

Updates golang/go#31277

Change-Id: I4feb796d0d58d3637428ae69997cfa3ec28a6b01
Reviewed-on: https://go-review.googlesource.com/c/sys/+/170957
Run-TryBot: Tobias Klauser <tobias.klauser@gmail.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Tobias Klauser 6 년 전
부모
커밋
4b34438f7a
2개의 변경된 파일13개의 추가작업 그리고 1개의 파일을 삭제
  1. 5 1
      unix/syscall_unix.go
  2. 8 0
      unix/syscall_unix_test.go

+ 5 - 1
unix/syscall_unix.go

@@ -351,7 +351,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) {

+ 8 - 0
unix/syscall_unix_test.go

@@ -403,6 +403,14 @@ func TestSeekFailure(t *testing.T) {
 	}
 }
 
+func TestSetsockoptString(t *testing.T) {
+	// should not panic on empty string, see issue #31277
+	err := unix.SetsockoptString(-1, 0, 0, "")
+	if err == nil {
+		t.Fatalf("SetsockoptString: did not fail")
+	}
+}
+
 func TestDup(t *testing.T) {
 	file, err := ioutil.TempFile("", "TestDup")
 	if err != nil {