1
0
mirror of https://github.com/json-iterator/go.git synced 2025-04-20 11:28:49 +02:00

fix unsafe reference

This commit is contained in:
Tao Wen 2016-12-11 18:19:26 +08:00
parent f154c8a934
commit c352559e52
2 changed files with 3 additions and 2 deletions

View File

@ -10,6 +10,7 @@ func Test_read_map(t *testing.T) {
iter := ParseString(`{"hello": "world"}`) iter := ParseString(`{"hello": "world"}`)
m := map[string]string{"1": "2"} m := map[string]string{"1": "2"}
iter.Read(&m) iter.Read(&m)
copy(iter.buf, []byte{0,0,0,0,0,0})
if !reflect.DeepEqual(map[string]string{"1": "2", "hello": "world"}, m) { if !reflect.DeepEqual(map[string]string{"1": "2", "hello": "world"}, m) {
fmt.Println(iter.Error) fmt.Println(iter.Error)
t.Fatal(m) t.Fatal(m)

View File

@ -327,7 +327,7 @@ func (decoder *mapDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
for field := iter.ReadObject(); field != ""; field = iter.ReadObject() { for field := iter.ReadObject(); field != ""; field = iter.ReadObject() {
elem := reflect.New(decoder.elemType) elem := reflect.New(decoder.elemType)
decoder.elemDecoder.decode(unsafe.Pointer(elem.Pointer()), iter) decoder.elemDecoder.decode(unsafe.Pointer(elem.Pointer()), iter)
realVal.SetMapIndex(reflect.ValueOf(field), elem.Elem()) realVal.SetMapIndex(reflect.ValueOf(string([]byte(field))), elem.Elem())
} }
} }
@ -514,7 +514,7 @@ func (iter *Iterator) ReadAny() (ret *Any) {
if iter.Error != nil { if iter.Error != nil {
return return
} }
val[field] = element.val val[string([]byte(field))] = element.val
} }
return MakeAny(val) return MakeAny(val)
default: default: