summaryrefslogtreecommitdiff
path: root/vendor/github.com/bytedance/sonic/ast/decode.go
diff options
context:
space:
mode:
authorLibravatar dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>2024-05-06 08:50:47 +0000
committerLibravatar GitHub <noreply@github.com>2024-05-06 08:50:47 +0000
commita5f28fe0c923984c263592e82bbce99b0032b794 (patch)
tree403544ad5305eb171a85d2b4c59559f83abd87a7 /vendor/github.com/bytedance/sonic/ast/decode.go
parent[chore]: Bump golang.org/x/image from 0.15.0 to 0.16.0 (#2898) (diff)
downloadgotosocial-a5f28fe0c923984c263592e82bbce99b0032b794.tar.xz
[chore]: Bump github.com/gin-contrib/gzip from 1.0.0 to 1.0.1 (#2899)
Bumps [github.com/gin-contrib/gzip](https://github.com/gin-contrib/gzip) from 1.0.0 to 1.0.1. - [Release notes](https://github.com/gin-contrib/gzip/releases) - [Changelog](https://github.com/gin-contrib/gzip/blob/master/.goreleaser.yaml) - [Commits](https://github.com/gin-contrib/gzip/compare/v1.0.0...v1.0.1) --- updated-dependencies: - dependency-name: github.com/gin-contrib/gzip dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Diffstat (limited to 'vendor/github.com/bytedance/sonic/ast/decode.go')
-rw-r--r--vendor/github.com/bytedance/sonic/ast/decode.go33
1 files changed, 33 insertions, 0 deletions
diff --git a/vendor/github.com/bytedance/sonic/ast/decode.go b/vendor/github.com/bytedance/sonic/ast/decode.go
index 3e08bfcb2..c521fb5f0 100644
--- a/vendor/github.com/bytedance/sonic/ast/decode.go
+++ b/vendor/github.com/bytedance/sonic/ast/decode.go
@@ -583,3 +583,36 @@ func skipArray(src string, pos int) (ret int, start int) {
pos++
}
}
+
+// DecodeString decodes a JSON string from pos and return golang string.
+// - needEsc indicates if to unescaped escaping chars
+// - hasEsc tells if the returned string has escaping chars
+// - validStr enables validating UTF8 charset
+//
+func _DecodeString(src string, pos int, needEsc bool, validStr bool) (v string, ret int, hasEsc bool) {
+ p := NewParserObj(src)
+ p.p = pos
+ switch val := p.decodeValue(); val.Vt {
+ case types.V_STRING:
+ str := p.s[val.Iv : p.p-1]
+ if validStr && !validate_utf8(str) {
+ return "", -int(types.ERR_INVALID_UTF8), false
+ }
+ /* fast path: no escape sequence */
+ if val.Ep == -1 {
+ return str, p.p, false
+ } else if !needEsc {
+ return str, p.p, true
+ }
+ /* unquote the string */
+ out, err := unquote(str)
+ /* check for errors */
+ if err != 0 {
+ return "", -int(err), true
+ } else {
+ return out, p.p, true
+ }
+ default:
+ return "", -int(_ERR_UNSUPPORT_TYPE), false
+ }
+}