From 3c55efb1a162b8ac0de93fc8f1c9d53d72e1b1b4 Mon Sep 17 00:00:00 2001 From: origuo Date: Mon, 19 Jul 2021 13:58:16 +0800 Subject: [PATCH] fix: invalid unicode while binary to string --- extra/binary_as_string_codec.go | 4 ++-- extra/binary_as_string_codec_test.go | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/extra/binary_as_string_codec.go b/extra/binary_as_string_codec.go index 57d0ae5b..13bc97ea 100644 --- a/extra/binary_as_string_codec.go +++ b/extra/binary_as_string_codec.go @@ -180,9 +180,9 @@ func readHex(iter *jsoniter.Iterator, b1, b2 byte) byte { } ret *= 16 if b2 >= '0' && b2 <= '9' { - ret = b2 - '0' + ret += b2 - '0' } else if b2 >= 'a' && b2 <= 'f' { - ret = b2 - 'a' + 10 + ret += b2 - 'a' + 10 } else { iter.ReportError("read hex", "expects 0~9 or a~f, but found "+string([]byte{b2})) return 0 diff --git a/extra/binary_as_string_codec_test.go b/extra/binary_as_string_codec_test.go index a00479e6..30d6c4d7 100644 --- a/extra/binary_as_string_codec_test.go +++ b/extra/binary_as_string_codec_test.go @@ -22,11 +22,11 @@ func TestBinaryAsStringCodec(t *testing.T) { }) t.Run("non safe set", func(t *testing.T) { should := require.New(t) - output, err := jsoniter.Marshal([]byte{1, 2, 3, 15}) + output, err := jsoniter.Marshal([]byte{1, 2, 3, 23}) should.NoError(err) - should.Equal(`"\\x01\\x02\\x03\\x0f"`, string(output)) + should.Equal(`"\\x01\\x02\\x03\\x17"`, string(output)) var val []byte should.NoError(jsoniter.Unmarshal(output, &val)) - should.Equal([]byte{1, 2, 3, 15}, val) + should.Equal([]byte{1, 2, 3, 23}, val) }) }