summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/pkg/json/struct.go2
-rw-r--r--src/pkg/json/struct_test.go31
2 files changed, 32 insertions, 1 deletions
diff --git a/src/pkg/json/struct.go b/src/pkg/json/struct.go
index 3fcf00e89..d94988b64 100644
--- a/src/pkg/json/struct.go
+++ b/src/pkg/json/struct.go
@@ -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
diff --git a/src/pkg/json/struct_test.go b/src/pkg/json/struct_test.go
index 95a3eb2a4..15446961a 100644
--- a/src/pkg/json/struct_test.go
+++ b/src/pkg/json/struct_test.go
@@ -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)
+ }
+ }
+}