aboutsummaryrefslogtreecommitdiff
path: root/src/encoding/gob/decode.go
diff options
context:
space:
mode:
authorRob Pike <r@golang.org>2014-09-25 17:16:27 -0700
committerRob Pike <r@golang.org>2014-09-25 17:16:27 -0700
commit868948badf4a033678c7d9510543b747c2157b11 (patch)
treedf2645626909b9ddea47d7fc34d6308a6cdfa599 /src/encoding/gob/decode.go
parent9c3fc838ba982571e704c1674e9f97678f8a6e93 (diff)
downloadgo-868948badf4a033678c7d9510543b747c2157b11.tar.gz
go-868948badf4a033678c7d9510543b747c2157b11.zip
encoding/gob: fix 386 build
LGTM=ruiu R=golang-codereviews, ruiu CC=golang-codereviews https://golang.org/cl/146320043
Diffstat (limited to 'src/encoding/gob/decode.go')
-rw-r--r--src/encoding/gob/decode.go15
1 files changed, 6 insertions, 9 deletions
diff --git a/src/encoding/gob/decode.go b/src/encoding/gob/decode.go
index 502209a8a8..6a9213fb3c 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))