Skip to content

Commit

Permalink
added \f \b according to RFC8259
Browse files Browse the repository at this point in the history
  • Loading branch information
barkyq committed Jan 18, 2023
1 parent 788345a commit 041656e
Showing 1 changed file with 18 additions and 14 deletions.
32 changes: 18 additions & 14 deletions parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -267,36 +267,40 @@ func parseObject(s string, c *cache, depth int) (*Value, string, error) {
}

func escapeString(dst []byte, s string) []byte {
dst = append(dst, 34)
dst = append(dst, '"')
for i := 0; i < len(s); i++ {
c := s[i]
switch {
case c == 0x22:
case c == '"':
// quotation mark
dst = append(dst, []byte{92, 34}...)
case c == 0x5c:
dst = append(dst, []byte{'\\', '"'}...)
case c == '\\':
// reverse solidus
dst = append(dst, []byte{92, 92}...)
dst = append(dst, []byte{'\\', '\\'}...)
case c >= 0x20:
// default, rest are control chars
// default, rest below are control chars
dst = append(dst, c)
case c == 0x08:
dst = append(dst, []byte{'\\', 'b'}...)
case c < 0x09:
dst = append(dst, []byte{92, 117, 48, 48, 48, 48 + c}...)
dst = append(dst, []byte{'\\', 'u', '0', '0', '0', '0' + c}...)
case c == 0x09:
dst = append(dst, []byte{92, 116}...)
dst = append(dst, []byte{'\\', 't'}...)
case c == 0x0a:
dst = append(dst, []byte{92, 110}...)
dst = append(dst, []byte{'\\', 'n'}...)
case c == 0x0c:
dst = append(dst, []byte{'\\', 'f'}...)
case c == 0x0d:
dst = append(dst, []byte{92, 114}...)
dst = append(dst, []byte{'\\', 'r'}...)
case c < 0x10:
dst = append(dst, []byte{92, 117, 48, 48, 48, 87 + c}...)
dst = append(dst, []byte{'\\', 'u', '0', '0', '0', 0x57 + c}...)
case c < 0x1a:
dst = append(dst, []byte{92, 117, 48, 48, 49, 32 + c}...)
dst = append(dst, []byte{'\\', 'u', '0', '0', '1', 0x20 + c}...)
case c < 0x20:
dst = append(dst, []byte{92, 117, 48, 48, 49, 71 + c}...)
dst = append(dst, []byte{'\\', 'u', '0', '0', '1', 0x47 + c}...)
}
}
dst = append(dst, 34)
dst = append(dst, '"')
return dst
}

Expand Down

0 comments on commit 041656e

Please sign in to comment.