]> Cypherpunks repositories - gostls13.git/commitdiff
fmt, encoding/gob: fix misuse of Read
authorShenghou Ma <minux.ma@gmail.com>
Mon, 17 Dec 2012 17:26:48 +0000 (01:26 +0800)
committerShenghou Ma <minux.ma@gmail.com>
Mon, 17 Dec 2012 17:26:48 +0000 (01:26 +0800)
reader.Read() can return both 0,nil and len(buf),err.
To be safe, we use io.ReadFull instead of doing reader.Read directly.

Fixes #3472.

R=bradfitz, rsc, ality
CC=golang-dev
https://golang.org/cl/6285050

src/pkg/encoding/gob/decode.go
src/pkg/fmt/scan.go

index 900c69ddb478440684bdaaab1bcab452d225c459..a80d9f9195fd930c4c067c0c9786fe2593c13fa8 100644 (file)
@@ -62,15 +62,15 @@ func overflow(name string) error {
 // Used only by the Decoder to read the message length.
 func decodeUintReader(r io.Reader, buf []byte) (x uint64, width int, err error) {
        width = 1
-       _, err = r.Read(buf[0:width])
-       if err != nil {
+       n, err := io.ReadFull(r, buf[0:width])
+       if n == 0 {
                return
        }
        b := buf[0]
        if b <= 0x7f {
                return uint64(b), width, nil
        }
-       n := -int(int8(b))
+       n = -int(int8(b))
        if n > uint64Size {
                err = errBadUint
                return
index 62de3a2efa6be32f834d329e5501d7bd9b8f0794..6a282c81f1dcebaf27ca6a57f2b366aa6c1ad4ec 100644 (file)
@@ -337,7 +337,10 @@ func (r *readRune) readByte() (b byte, err error) {
                r.pending--
                return
        }
-       _, err = r.reader.Read(r.pendBuf[0:1])
+       n, err := io.ReadFull(r.reader, r.pendBuf[0:1])
+       if n != 1 {
+               return 0, err
+       }
        return r.pendBuf[0], err
 }