From: Robert Griesemer Date: Wed, 21 Sep 2011 21:47:00 +0000 (-0700) Subject: gob: slightly simpler decodeUint X-Git-Tag: weekly.2011-09-21~6 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=3e02fff00712c3ab714b51c6b61fa6ac79d5275d;p=gostls13.git gob: slightly simpler decodeUint R=r CC=golang-dev https://golang.org/cl/5089048 --- diff --git a/src/pkg/gob/decode.go b/src/pkg/gob/decode.go index 60c0e10cea..9d8d905874 100644 --- a/src/pkg/gob/decode.go +++ b/src/pkg/gob/decode.go @@ -70,13 +70,12 @@ func decodeUintReader(r io.Reader, buf []byte) (x uint64, width int, err os.Erro if b <= 0x7f { return uint64(b), width, nil } - nb := -int(int8(b)) - if nb > uint64Size { + n := -int(int8(b)) + if n > uint64Size { err = errBadUint return } - var n int - n, err = io.ReadFull(r, buf[0:nb]) + width, err = io.ReadFull(r, buf[0:n]) if err != nil { if err == os.EOF { err = io.ErrUnexpectedEOF @@ -84,11 +83,10 @@ func decodeUintReader(r io.Reader, buf []byte) (x uint64, width int, err os.Erro return } // Could check that the high byte is zero but it's not worth it. - for i := 0; i < n; i++ { - x <<= 8 - x |= uint64(buf[i]) - width++ + for _, b := range buf[0:width] { + x = x<<8 | uint64(b) } + width++ // +1 for length byte return } @@ -102,19 +100,18 @@ func (state *decoderState) decodeUint() (x uint64) { if b <= 0x7f { return uint64(b) } - nb := -int(int8(b)) - if nb > uint64Size { + n := -int(int8(b)) + if n > uint64Size { error(errBadUint) } - n, err := state.b.Read(state.buf[0:nb]) + width, err := state.b.Read(state.buf[0:n]) if err != nil { error(err) } // Don't need to check error; it's safe to loop regardless. // Could check that the high byte is zero but it's not worth it. - for i := 0; i < n; i++ { - x <<= 8 - x |= uint64(state.buf[i]) + for _, b := range state.buf[0:width] { + x = x<<8 | uint64(b) } return x }