commit 6a58a698ecd2204199ab86db9d1dfd9a7031dc77
parent bd731ef75d7fbb57cad637370b64f167aa5ead0c
Author: francoispqt <francois@parquet.ninja>
Date: Sun, 12 Aug 2018 01:34:06 +0800
add tests for solidus escaping sequence
Diffstat:
2 files changed, 18 insertions(+), 3 deletions(-)
diff --git a/decode_string.go b/decode_string.go
@@ -55,7 +55,6 @@ func (dec *Decoder) parseEscapedString() error {
if dec.cursor >= dec.length && !dec.read() {
return dec.raiseInvalidJSONErr(dec.cursor)
}
-
switch dec.data[dec.cursor] {
case '"':
dec.data[dec.cursor] = '"'
@@ -80,7 +79,6 @@ func (dec *Decoder) parseEscapedString() error {
if err != nil {
return err
}
-
diff := dec.cursor - start
dec.data = append(append(dec.data[:start-1], str...), dec.data[dec.cursor:]...)
dec.length = len(dec.data)
@@ -90,7 +88,6 @@ 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--
diff --git a/decode_string_test.go b/decode_string_test.go
@@ -102,6 +102,24 @@ func TestDecoderString(t *testing.T) {
err: true,
},
{
+ name: "escape-control-char-solidus",
+ json: `"\/"`,
+ expectedResult: "/",
+ err: false,
+ },
+ {
+ name: "escape-control-char-solidus",
+ json: `"/"`,
+ expectedResult: "/",
+ err: false,
+ },
+ {
+ name: "escape-control-char-solidus-escape-char",
+ json: `"\\/"`,
+ expectedResult: `\/`,
+ err: false,
+ },
+ {
name: "escape-control-char",
json: `"\\r"`,
expectedResult: `\r`,