diff options
Diffstat (limited to 'src/encoding')
| -rw-r--r-- | src/encoding/gob/decode.go | 17 | ||||
| -rw-r--r-- | src/encoding/gob/decoder.go | 6 |
2 files changed, 10 insertions, 13 deletions
diff --git a/src/encoding/gob/decode.go b/src/encoding/gob/decode.go index 7bca13c957..470e357b10 100644 --- a/src/encoding/gob/decode.go +++ b/src/encoding/gob/decode.go @@ -57,17 +57,6 @@ func (d *decBuffer) Drop(n int) { d.offset += n } -// Size grows the buffer to exactly n bytes, so d.Bytes() will -// return a slice of length n. Existing data is first discarded. -func (d *decBuffer) Size(n int) { - d.Reset() - if cap(d.data) < n { - d.data = make([]byte, n) - } else { - d.data = d.data[0:n] - } -} - func (d *decBuffer) ReadByte() (byte, error) { if d.offset >= len(d.data) { return 0, io.EOF @@ -85,6 +74,12 @@ func (d *decBuffer) Bytes() []byte { return d.data[d.offset:] } +// SetBytes sets the buffer to the bytes, discarding any existing data. +func (d *decBuffer) SetBytes(data []byte) { + d.data = data + d.offset = 0 +} + func (d *decBuffer) Reset() { d.data = d.data[0:0] d.offset = 0 diff --git a/src/encoding/gob/decoder.go b/src/encoding/gob/decoder.go index 9c4257eb3b..5b77adc7e8 100644 --- a/src/encoding/gob/decoder.go +++ b/src/encoding/gob/decoder.go @@ -7,6 +7,7 @@ package gob import ( "bufio" "errors" + "internal/saferio" "io" "reflect" "sync" @@ -98,8 +99,9 @@ func (dec *Decoder) readMessage(nbytes int) { panic("non-empty decoder buffer") } // Read the data - dec.buf.Size(nbytes) - _, dec.err = io.ReadFull(dec.r, dec.buf.Bytes()) + var buf []byte + buf, dec.err = saferio.ReadData(dec.r, uint64(nbytes)) + dec.buf.SetBytes(buf) if dec.err == io.EOF { dec.err = io.ErrUnexpectedEOF } |
