Skip to content

Commit 041656e

Browse files
committed
added \f \b according to RFC8259
1 parent 788345a commit 041656e

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

parser.go

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -267,36 +267,40 @@ func parseObject(s string, c *cache, depth int) (*Value, string, error) {
267267
}
268268

269269
func escapeString(dst []byte, s string) []byte {
270-
dst = append(dst, 34)
270+
dst = append(dst, '"')
271271
for i := 0; i < len(s); i++ {
272272
c := s[i]
273273
switch {
274-
case c == 0x22:
274+
case c == '"':
275275
// quotation mark
276-
dst = append(dst, []byte{92, 34}...)
277-
case c == 0x5c:
276+
dst = append(dst, []byte{'\\', '"'}...)
277+
case c == '\\':
278278
// reverse solidus
279-
dst = append(dst, []byte{92, 92}...)
279+
dst = append(dst, []byte{'\\', '\\'}...)
280280
case c >= 0x20:
281-
// default, rest are control chars
281+
// default, rest below are control chars
282282
dst = append(dst, c)
283+
case c == 0x08:
284+
dst = append(dst, []byte{'\\', 'b'}...)
283285
case c < 0x09:
284-
dst = append(dst, []byte{92, 117, 48, 48, 48, 48 + c}...)
286+
dst = append(dst, []byte{'\\', 'u', '0', '0', '0', '0' + c}...)
285287
case c == 0x09:
286-
dst = append(dst, []byte{92, 116}...)
288+
dst = append(dst, []byte{'\\', 't'}...)
287289
case c == 0x0a:
288-
dst = append(dst, []byte{92, 110}...)
290+
dst = append(dst, []byte{'\\', 'n'}...)
291+
case c == 0x0c:
292+
dst = append(dst, []byte{'\\', 'f'}...)
289293
case c == 0x0d:
290-
dst = append(dst, []byte{92, 114}...)
294+
dst = append(dst, []byte{'\\', 'r'}...)
291295
case c < 0x10:
292-
dst = append(dst, []byte{92, 117, 48, 48, 48, 87 + c}...)
296+
dst = append(dst, []byte{'\\', 'u', '0', '0', '0', 0x57 + c}...)
293297
case c < 0x1a:
294-
dst = append(dst, []byte{92, 117, 48, 48, 49, 32 + c}...)
298+
dst = append(dst, []byte{'\\', 'u', '0', '0', '1', 0x20 + c}...)
295299
case c < 0x20:
296-
dst = append(dst, []byte{92, 117, 48, 48, 49, 71 + c}...)
300+
dst = append(dst, []byte{'\\', 'u', '0', '0', '1', 0x47 + c}...)
297301
}
298302
}
299-
dst = append(dst, 34)
303+
dst = append(dst, '"')
300304
return dst
301305
}
302306

0 commit comments

Comments
 (0)