]> Cypherpunks repositories - gostls13.git/commitdiff
encoding/binary: check for unsigned integers in intDataSize.
authorStan Schwertly <stan@schwertly.com>
Thu, 18 Dec 2014 19:32:40 +0000 (19:32 +0000)
committerRuss Cox <rsc@golang.org>
Mon, 22 Dec 2014 20:14:59 +0000 (20:14 +0000)
intDataSize ignores unsigned integers, forcing reads/writes to miss the fast path.

Fixes #8956

Change-Id: Ie79b565b037db3c469aa1dc6d0a8a5a9252d5f0a
Reviewed-on: https://go-review.googlesource.com/1777
Reviewed-by: Russ Cox <rsc@golang.org>
src/encoding/binary/binary.go

index 466bf97c973b573ed00301b671c06d9ca5b2c579..3c379498622549cca4e36eee14e9ea61116dc3db 100644 (file)
@@ -605,25 +605,25 @@ func (e *encoder) skip(v reflect.Value) {
 // It returns zero if the type cannot be implemented by the fast path in Read or Write.
 func intDataSize(data interface{}) int {
        switch data := data.(type) {
-       case int8, *int8, *uint8:
+       case int8, uint8, *int8, *uint8:
                return 1
        case []int8:
                return len(data)
        case []uint8:
                return len(data)
-       case int16, *int16, *uint16:
+       case int16, uint16, *int16, *uint16:
                return 2
        case []int16:
                return 2 * len(data)
        case []uint16:
                return 2 * len(data)
-       case int32, *int32, *uint32:
+       case int32, uint32, *int32, *uint32:
                return 4
        case []int32:
                return 4 * len(data)
        case []uint32:
                return 4 * len(data)
-       case int64, *int64, *uint64:
+       case int64, uint64, *int64, *uint64:
                return 8
        case []int64:
                return 8 * len(data)