1
0
mirror of https://github.com/golang/go synced 2024-11-22 08:04:39 -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:
Adam Langley 2009-11-13 11:29:13 -08:00
parent 3f7a32405d
commit 87bc9b53fd
2 changed files with 32 additions and 1 deletions

View File

@ -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

View File

@ -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)
}
}
}