处理AI胡乱生成的乱摊子
This commit is contained in:
35
vendor/github.com/bytedance/sonic/unquote/unquote.go
generated
vendored
35
vendor/github.com/bytedance/sonic/unquote/unquote.go
generated
vendored
@@ -1,3 +1,7 @@
|
||||
//go:build (amd64 && go1.17 && !go1.26) || (arm64 && go1.20 && !go1.26)
|
||||
// +build amd64,go1.17,!go1.26 arm64,go1.20,!go1.26
|
||||
|
||||
|
||||
/*
|
||||
* Copyright 2021 ByteDance Inc.
|
||||
*
|
||||
@@ -25,27 +29,45 @@ import (
|
||||
`github.com/bytedance/sonic/internal/rt`
|
||||
)
|
||||
|
||||
// String unescapes an escaped string (not including `"` at beginning and end)
|
||||
// It validates invalid UTF8 and replace with `\ufffd`
|
||||
func String(s string) (ret string, err types.ParsingError) {
|
||||
mm := make([]byte, 0, len(s))
|
||||
err = intoBytesUnsafe(s, &mm)
|
||||
err = intoBytesUnsafe(s, &mm, true)
|
||||
ret = rt.Mem2Str(mm)
|
||||
return
|
||||
}
|
||||
|
||||
// IntoBytes is same with String besides it output result into a buffer m
|
||||
func IntoBytes(s string, m *[]byte) types.ParsingError {
|
||||
if cap(*m) < len(s) {
|
||||
return types.ERR_EOF
|
||||
} else {
|
||||
return intoBytesUnsafe(s, m)
|
||||
return intoBytesUnsafe(s, m, true)
|
||||
}
|
||||
}
|
||||
|
||||
func intoBytesUnsafe(s string, m *[]byte) types.ParsingError {
|
||||
// String unescapes an escaped string (not including `"` at beginning and end)
|
||||
// - replace enables replacing invalid utf8 escaped char with `\uffd`
|
||||
func _String(s string, replace bool) (ret string, err error) {
|
||||
mm := make([]byte, 0, len(s))
|
||||
err = intoBytesUnsafe(s, &mm, replace)
|
||||
ret = rt.Mem2Str(mm)
|
||||
return
|
||||
}
|
||||
|
||||
func intoBytesUnsafe(s string, m *[]byte, replace bool) types.ParsingError {
|
||||
pos := -1
|
||||
slv := (*rt.GoSlice)(unsafe.Pointer(m))
|
||||
str := (*rt.GoString)(unsafe.Pointer(&s))
|
||||
/* unquote as the default configuration, replace invalid unicode with \ufffd */
|
||||
ret := native.Unquote(str.Ptr, str.Len, slv.Ptr, &pos, types.F_UNICODE_REPLACE)
|
||||
|
||||
flags := uint64(0)
|
||||
if replace {
|
||||
/* unquote as the default configuration, replace invalid unicode with \ufffd */
|
||||
flags |= types.F_UNICODE_REPLACE
|
||||
}
|
||||
|
||||
ret := native.Unquote(str.Ptr, str.Len, slv.Ptr, &pos, flags)
|
||||
|
||||
/* check for errors */
|
||||
if ret < 0 {
|
||||
@@ -57,3 +79,6 @@ func intoBytesUnsafe(s string, m *[]byte) types.ParsingError {
|
||||
runtime.KeepAlive(s)
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user