Commit a48e7896 authored by Stan Schwertly's avatar Stan Schwertly Committed by Russ Cox

encoding/binary: check for unsigned integers in intDataSize.

intDataSize ignores unsigned integers, forcing reads/writes to miss the fast path.

Fixes #8956

Change-Id: Ie79b565b037db3c469aa1dc6d0a8a5a9252d5f0a
Reviewed-on: https://go-review.googlesource.com/1777Reviewed-by: default avatarRuss Cox <rsc@golang.org>
parent 1e93125a
...@@ -605,25 +605,25 @@ func (e *encoder) skip(v reflect.Value) { ...@@ -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. // It returns zero if the type cannot be implemented by the fast path in Read or Write.
func intDataSize(data interface{}) int { func intDataSize(data interface{}) int {
switch data := data.(type) { switch data := data.(type) {
case int8, *int8, *uint8: case int8, uint8, *int8, *uint8:
return 1 return 1
case []int8: case []int8:
return len(data) return len(data)
case []uint8: case []uint8:
return len(data) return len(data)
case int16, *int16, *uint16: case int16, uint16, *int16, *uint16:
return 2 return 2
case []int16: case []int16:
return 2 * len(data) return 2 * len(data)
case []uint16: case []uint16:
return 2 * len(data) return 2 * len(data)
case int32, *int32, *uint32: case int32, uint32, *int32, *uint32:
return 4 return 4
case []int32: case []int32:
return 4 * len(data) return 4 * len(data)
case []uint32: case []uint32:
return 4 * len(data) return 4 * len(data)
case int64, *int64, *uint64: case int64, uint64, *int64, *uint64:
return 8 return 8
case []int64: case []int64:
return 8 * len(data) return 8 * len(data)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment