aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2014-05-20 11:38:34 -0400
committerRuss Cox <rsc@golang.org>2014-05-20 11:38:34 -0400
commit82854d7b398ff49896c6b10e954891aa36fb1ade (patch)
tree285e7350cf1cd44548da71f1d98037c5170168a6
parenta4a1fadfa2bdb4f6cfb1ed1dcf6b4bb0cd58060f (diff)
downloadgo-82854d7b398ff49896c6b10e954891aa36fb1ade.tar.xz
syscall: fix Write(nil) on NaCl
Fixes #7050. LGTM=crawshaw, r R=golang-codereviews, crawshaw, r CC=golang-codereviews https://golang.org/cl/91590043
-rw-r--r--src/pkg/syscall/fd_nacl.go6
-rw-r--r--test/fixedbugs/issue7050.go19
2 files changed, 25 insertions, 0 deletions
diff --git a/src/pkg/syscall/fd_nacl.go b/src/pkg/syscall/fd_nacl.go
index 19cd98acb1..74324142a7 100644
--- a/src/pkg/syscall/fd_nacl.go
+++ b/src/pkg/syscall/fd_nacl.go
@@ -162,7 +162,13 @@ func Read(fd int, b []byte) (int, error) {
return f.impl.read(b)
}
+var zerobuf [0]byte
+
func Write(fd int, b []byte) (int, error) {
+ if b == nil {
+ // avoid nil in syscalls; nacl doesn't like that.
+ b = zerobuf[:]
+ }
f, err := fdToFile(fd)
if err != nil {
return 0, err
diff --git a/test/fixedbugs/issue7050.go b/test/fixedbugs/issue7050.go
new file mode 100644
index 0000000000..e58b684049
--- /dev/null
+++ b/test/fixedbugs/issue7050.go
@@ -0,0 +1,19 @@
+// run
+
+// Copyright 2014 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.
+
+package main
+
+import (
+ "fmt"
+ "os"
+)
+
+func main() {
+ _, err := os.Stdout.Write(nil)
+ if err != nil {
+ fmt.Printf("BUG: os.Stdout.Write(nil) = %v\n", err)
+ }
+}