diff options
author | Rob Pike <r@golang.org> | 2014-09-25 17:16:27 -0700 |
---|---|---|
committer | Rob Pike <r@golang.org> | 2014-09-25 17:16:27 -0700 |
commit | 126ab6752c8c8e3ca865a3eb7f8285a53737d718 (patch) | |
tree | f4ddcece34080f86f0a52fc5bf7c2d3828d4f5ef /src | |
parent | dcf439882a6f616d6f228103dcb39778c537c075 (diff) | |
download | go-126ab6752c8c8e3ca865a3eb7f8285a53737d718.tar.gz |
encoding/gob: fix 386 build
LGTM=ruiu
R=golang-codereviews, ruiu
CC=golang-codereviews
https://codereview.appspot.com/146320043
Diffstat (limited to 'src')
-rw-r--r-- | src/encoding/gob/decode.go | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/src/encoding/gob/decode.go b/src/encoding/gob/decode.go index 502209a8a..6a9213fb3 100644 --- a/src/encoding/gob/decode.go +++ b/src/encoding/gob/decode.go @@ -536,18 +536,15 @@ func (dec *Decoder) ignoreMap(state *decoderState, keyOp, elemOp decOp) { // Slices are encoded as an unsigned length followed by the elements. func (dec *Decoder) decodeSlice(state *decoderState, value reflect.Value, elemOp decOp, ovfl error) { u := state.decodeUint() - n := int(u) - if n < 0 || uint64(n) != u { - // We don't check n against buffer length here because if it's a slice - // of interfaces, there will be buffer reloads. - errorf("length of %s is negative (%d bytes)", value.Type(), u) - } typ := value.Type() size := uint64(typ.Elem().Size()) - // Take care with overflow in this calculation. nBytes := u * size - if nBytes > tooBig || (size > 0 && nBytes/size != u) { - errorf("%s slice too big: %d elements of %d bytes", typ.Elem(), n, size) + n := int(u) + // Take care with overflow in this calculation. + if n < 0 || uint64(n) != u || nBytes > tooBig || (size > 0 && nBytes/size != u) { + // We don't check n against buffer length here because if it's a slice + // of interfaces, there will be buffer reloads. + errorf("%s slice too big: %d elements of %d bytes", typ.Elem(), u, size) } if value.Cap() < n { value.Set(reflect.MakeSlice(typ, n, n)) |