summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2009-12-13 07:27:43 +1100
committerRob Pike <r@golang.org>2009-12-13 07:27:43 +1100
commite58da2f3978fa40e5943487dfbb58768928cc23f (patch)
tree4dd551983c4761731889e0a3a68147f8febd2fba
parent736d0608c51d6f041dee88f8ae0e06acf09ce5a3 (diff)
downloadgolang-e58da2f3978fa40e5943487dfbb58768928cc23f.tar.gz
fix bug for large counts: used a one-byte buffer.
R=rsc CC=golang-dev http://codereview.appspot.com/174082
-rw-r--r--src/pkg/gob/decoder.go5
1 files changed, 2 insertions, 3 deletions
diff --git a/src/pkg/gob/decoder.go b/src/pkg/gob/decoder.go
index a88c97400..5202c8285 100644
--- a/src/pkg/gob/decoder.go
+++ b/src/pkg/gob/decoder.go
@@ -23,7 +23,7 @@ type Decoder struct {
state *decodeState; // reads data from in-memory buffer
countState *decodeState; // reads counts from wire
buf []byte;
- oneByte []byte;
+ countBuf [9]byte; // counts may be uint64s (unlikely!), require 9 bytes
}
// NewDecoder returns a new decoder that reads from the io.Reader.
@@ -34,7 +34,6 @@ func NewDecoder(r io.Reader) *Decoder {
dec.state = newDecodeState(nil); // buffer set in Decode(); rest is unimportant
dec.decoderCache = make(map[reflect.Type]map[typeId]**decEngine);
dec.ignorerCache = make(map[typeId]**decEngine);
- dec.oneByte = make([]byte, 1);
return dec;
}
@@ -73,7 +72,7 @@ func (dec *Decoder) Decode(e interface{}) os.Error {
for {
// Read a count.
var nbytes uint64;
- nbytes, dec.state.err = decodeUintReader(dec.r, dec.oneByte);
+ nbytes, dec.state.err = decodeUintReader(dec.r, dec.countBuf[0:]);
if dec.state.err != nil {
break
}