Просмотр исходного кода

#153 fix invalid utf8 using same implementation as the standard library

Tao Wen 8 лет назад
Родитель
Сommit
36b14963da
2 измененных файлов с 9 добавлено и 3 удалено
  1. 4 1
      feature_stream_string.go
  2. 5 2
      jsoniter_invalid_test.go

+ 4 - 1
feature_stream_string.go

@@ -286,8 +286,11 @@ func writeStringSlowPathWithHTMLEscaped(stream *Stream, i int, s string, valLen
 		}
 		c, size := utf8.DecodeRuneInString(s[i:])
 		if c == utf8.RuneError && size == 1 {
+			if start < i {
+				stream.WriteRaw(s[start:i])
+			}
+			stream.WriteRaw(`\ufffd`)
 			i++
-			stream.WriteRaw(s[start:i])
 			start = i
 			continue
 		}

+ 5 - 2
jsoniter_invalid_test.go

@@ -122,8 +122,11 @@ func Test_invalid_number(t *testing.T) {
 	obj := Message{}
 	decoder := ConfigCompatibleWithStandardLibrary.NewDecoder(bytes.NewBufferString(`{"number":"5"}`))
 	err := decoder.Decode(&obj)
-	result, err := ConfigCompatibleWithStandardLibrary.Marshal(err.Error())
+	invalidStr := err.Error()
+	result, err := ConfigCompatibleWithStandardLibrary.Marshal(invalidStr)
 	should := require.New(t)
 	should.Nil(err)
-	should.Contains(string(result), "\xff")
+	result2, err := json.Marshal(invalidStr)
+	should.Nil(err)
+	should.Equal(string(result2), string(result))
 }