mirror of
https://github.com/golang/go
synced 2024-11-22 02:34:40 -07:00
json: fix addressing of slice indexes that are multiples of 8.
Fixes #147. R=rsc CC=golang-dev https://golang.org/cl/152123
This commit is contained in:
parent
3f7a32405d
commit
87bc9b53fd
@ -154,7 +154,7 @@ func (b *structBuilder) Elem(i int) Builder {
|
||||
return &structBuilder{val: v.Elem(i)}
|
||||
}
|
||||
case *reflect.SliceValue:
|
||||
if i > v.Cap() {
|
||||
if i >= v.Cap() {
|
||||
n := v.Cap();
|
||||
if n < 8 {
|
||||
n = 8
|
||||
|
@ -6,6 +6,7 @@ package json
|
||||
|
||||
import (
|
||||
"reflect";
|
||||
"strconv";
|
||||
"testing";
|
||||
)
|
||||
|
||||
@ -101,3 +102,33 @@ func TestUnmarshal(t *testing.T) {
|
||||
check(t, reflect.DeepEqual(m.MapStruct, decodedMapStruct), "mapstruct", m.MapStruct);
|
||||
check(t, reflect.DeepEqual(m.MapPtrStruct, decodedMapPtrStruct), "mapptrstruct", m.MapPtrStruct);
|
||||
}
|
||||
|
||||
type Issue147Text struct {
|
||||
Text string;
|
||||
}
|
||||
|
||||
type Issue147 struct {
|
||||
Test []Issue147Text;
|
||||
}
|
||||
|
||||
const issue147Input = `{"test": [{"text":"0"},{"text":"1"},{"text":"2"},
|
||||
{"text":"3"},{"text":"4"},{"text":"5"},
|
||||
{"text":"6"},{"text":"7"},{"text":"8"},
|
||||
{"text":"9"},{"text":"10"},{"text":"11"},
|
||||
{"text":"12"},{"text":"13"},{"text":"14"},
|
||||
{"text":"15"},{"text":"16"},{"text":"17"},
|
||||
{"text":"18"},{"text":"19"},{"text":"20"},
|
||||
{"text":"21"},{"text":"22"},{"text":"23"},
|
||||
{"text":"24"},{"text":"25"},{"text":"26"},
|
||||
{"text":"27"},{"text":"28"},{"text":"29"}]}`
|
||||
|
||||
func TestIssue147(t *testing.T) {
|
||||
var timeline Issue147;
|
||||
Unmarshal(issue147Input, &timeline);
|
||||
|
||||
for i, e := range timeline.Test {
|
||||
if e.Text != strconv.Itoa(i) {
|
||||
t.Errorf("index: %d got: %s want: %d", i, e.Text, i)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user