Browse Source

fix unsafe reference

Tao Wen 9 years ago
parent
commit
c352559e52
2 changed files with 3 additions and 2 deletions
  1. 1 0
      jsoniter_map_test.go
  2. 2 2
      jsoniter_reflect.go

+ 1 - 0
jsoniter_map_test.go

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

+ 2 - 2
jsoniter_reflect.go

@@ -327,7 +327,7 @@ func (decoder *mapDecoder) decode(ptr unsafe.Pointer, iter *Iterator) {
 	for field := iter.ReadObject(); field != ""; field = iter.ReadObject() {
 		elem := reflect.New(decoder.elemType)
 		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 {
 				return
 			}
-			val[field] = element.val
+			val[string([]byte(field))] = element.val
 		}
 		return MakeAny(val)
 	default: