There is some kind of off-by-one bug here and we end up with nils in the

slice.

I'm not sure exactly what the error is, but this code seems to be
ancient and predate the invention of append(), I replaced it with a call
to append() and seems to work fine.

Leaving the code commented out because I'm not satisified I understand
it.
This commit is contained in:
Uriel 2012-09-03 02:45:23 +02:00
parent 9af83c7cd1
commit a704418110

View file

@ -66,6 +66,7 @@ func (j *decoder) Elem(i int) Builder {
v = make([]interface{}, 0, 8) v = make([]interface{}, 0, 8)
j.value = v j.value = v
} }
/* XXX There is a bug in here somewhere, but append() works fine.
lens := len(v) lens := len(v)
if cap(v) <= lens { if cap(v) <= lens {
news := make([]interface{}, 0, lens*2) news := make([]interface{}, 0, lens*2)
@ -73,6 +74,8 @@ func (j *decoder) Elem(i int) Builder {
v = news v = news
} }
v = v[0 : lens+1] v = v[0 : lens+1]
*/
v = append(v, nil)
j.value = v j.value = v
return newDecoder(v, i) return newDecoder(v, i)
} }