summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2010-01-28 17:38:51 -0800
committerRuss Cox <rsc@golang.org>2010-01-28 17:38:51 -0800
commitf31de50e666cb24cc723060b7ad612d18f1e6e2f (patch)
treecfdd0039a8d20eb7eac48ae13c2d44f939a2a442
parent1a9c2f230a79aa5e992121b73054a97ab7e6d678 (diff)
downloadgolang-f31de50e666cb24cc723060b7ad612d18f1e6e2f.tar.gz
io: fix nil Write bug in Pipe
R=nigeltao_golang CC=golang-dev http://codereview.appspot.com/194132
-rw-r--r--src/pkg/io/pipe.go2
-rw-r--r--src/pkg/io/pipe_test.go22
2 files changed, 23 insertions, 1 deletions
diff --git a/src/pkg/io/pipe.go b/src/pkg/io/pipe.go
index 8f821a9c6..909989ae6 100644
--- a/src/pkg/io/pipe.go
+++ b/src/pkg/io/pipe.go
@@ -39,7 +39,7 @@ func (p *pipe) Read(data []byte) (n int, err os.Error) {
if !p.wclosed {
p.wpend = <-p.cr
}
- if p.wpend == nil {
+ if p.wclosed {
return 0, p.werr
}
p.wtot = 0
diff --git a/src/pkg/io/pipe_test.go b/src/pkg/io/pipe_test.go
index 793bed459..b0ee0f20b 100644
--- a/src/pkg/io/pipe_test.go
+++ b/src/pkg/io/pipe_test.go
@@ -236,3 +236,25 @@ func TestPipeWriteClose(t *testing.T) {
}
}
}
+
+func TestWriteEmpty(t *testing.T) {
+ r, w := Pipe()
+ go func() {
+ w.Write([]byte{})
+ w.Close()
+ }()
+ var b [2]byte
+ ReadFull(r, b[0:2])
+ r.Close()
+}
+
+func TestWriteNil(t *testing.T) {
+ r, w := Pipe()
+ go func() {
+ w.Write(nil)
+ w.Close()
+ }()
+ var b [2]byte
+ ReadFull(r, b[0:2])
+ r.Close()
+}