gojay

high performance JSON encoder/decoder with stream API for Golang
git clone git://git.lair.cx/gojay
Log | Files | Refs | README | LICENSE

commit ecd6b1ca207d813e38de9fa71439b4861adcb35d
parent 0281453e1a61e3c511191afe1c74c3f1f079a28b
Author: francoispqt <francois@parquet.ninja>
Date:   Tue, 21 Aug 2018 12:10:21 +0800

add tests and skip string handling of escaped solidus

Diffstat:
Mdecode_object_test.go | 4++++
Mdecode_string.go | 4++--
Mdecode_string_test.go | 12++++++++++++
3 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/decode_object_test.go b/decode_object_test.go @@ -1369,6 +1369,10 @@ func TestSkipObject(t *testing.T) { json: `"key":"value"}`, }, { + name: "basic-escape-solidus", + json: `"key":"value\/solidus"}`, + }, + { name: "basic-escaped", json: `"key":"value\\\\\\\" hello"}`, }, diff --git a/decode_string.go b/decode_string.go @@ -88,7 +88,7 @@ func (dec *Decoder) parseEscapedString() error { default: return dec.raiseInvalidJSONErr(dec.cursor) } - // Truncate the previous backslash character, and the + dec.data = append(dec.data[:dec.cursor-1], dec.data[dec.cursor:]...) dec.length-- @@ -138,7 +138,7 @@ func (dec *Decoder) skipEscapedString() error { return dec.raiseInvalidJSONErr(dec.cursor) } return nil - case 'n', 'r', 't': + case 'n', 'r', 't', '/', 'f', 'b': return nil default: // nSlash must be even diff --git a/decode_string_test.go b/decode_string_test.go @@ -24,6 +24,12 @@ func TestDecoderString(t *testing.T) { err: false, }, { + name: "string-solidus", + json: `"\/"`, + expectedResult: "/", + err: false, + }, + { name: "basic-string", json: ``, expectedResult: "", @@ -403,6 +409,12 @@ func TestSkipString(t *testing.T) { err: true, errType: InvalidJSONError(""), }, + { + name: "string-solidus", + json: `Asia\/Bangkok","enable":true}"`, + expectedResult: "", + err: false, + }, } for _, testCase := range testCases {