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:
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 {