diff options
| author | 2025-10-13 16:49:53 +0200 | |
|---|---|---|
| committer | 2025-10-17 15:32:55 +0200 | |
| commit | ea7eeada77a52fd58a9e1a949a39eccc7bce955a (patch) | |
| tree | ede9f651d0bd7782b565883f9384341530f8320f /vendor/github.com/bytedance/sonic/internal/encoder/alg | |
| parent | [bugfix] repeated posts on timeline endpoints (#4494) (diff) | |
| download | gotosocial-ea7eeada77a52fd58a9e1a949a39eccc7bce955a.tar.xz | |
[chore] update dependencies (#4495)
- github.com/coreos/go-oidc/v3: v3.15.0 -> v3.16.0
- github.com/go-playground/form/v4: v4.2.1 -> v4.3.0
- github.com/go-swagger/go-swagger: v0.32.3 -> v0.33.1
- golang.org/x/crypto: v0.42.0 -> v0.43.0
- golang.org/x/image: v0.31.0 -> v0.32.0
- golang.org/x/net: v0.45.0 -> v0.46.0
- golang.org/x/oauth2: v0.31.0 -> v0.32.0
- golang.org/x/sys: v0.36.0 -> v0.37.0
- golang.org/x/text: v0.29.0 -> v0.30.0
- modernc.org/sqlite: v1.39.0 -> v1.39.1 (w/ concurrency workaround)
Reviewed-on: https://codeberg.org/superseriousbusiness/gotosocial/pulls/4495
Co-authored-by: kim <grufwub@gmail.com>
Co-committed-by: kim <grufwub@gmail.com>
Diffstat (limited to 'vendor/github.com/bytedance/sonic/internal/encoder/alg')
4 files changed, 101 insertions, 125 deletions
diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/alg/mapiter.go b/vendor/github.com/bytedance/sonic/internal/encoder/alg/mapiter.go index 090afac13..4664d90ca 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/alg/mapiter.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/alg/mapiter.go @@ -84,15 +84,24 @@ func (self *MapIterator) data() (p []_MapPair) { func (self *MapIterator) append(t *rt.GoType, k unsafe.Pointer, v unsafe.Pointer) (err error) { p := self.add() p.v = v + tk := t.Kind() - /* check for strings */ - if tk := t.Kind(); tk != reflect.String { - return self.appendGeneric(p, t, tk, k) + // followed as `encoding/json/emcode.go:resolveKeyName + if tk == reflect.String { + p.k = *(*string)(k) + return nil } - /* fast path for strings */ - p.k = *(*string)(k) - return nil + // check if the key implements the encoding.TextMarshaler interface + if t.Pack().Implements(vars.EncodingTextMarshalerType) { + if tk != reflect.Interface { + return self.appendConcrete(p, t, k) + } else { + return self.appendInterface(p, t, k) + } + } + + return self.appendGeneric(p, t, tk, k) } func (self *MapIterator) appendGeneric(p *_MapPair, t *rt.GoType, v reflect.Kind, k unsafe.Pointer) error { @@ -109,34 +118,43 @@ func (self *MapIterator) appendGeneric(p *_MapPair, t *rt.GoType, v reflect.Kind case reflect.Uint64 : p.k = rt.Mem2Str(strconv.AppendUint(p.m[:0], uint64(*(*uint64)(k)), 10)) ; return nil case reflect.Uintptr : p.k = rt.Mem2Str(strconv.AppendUint(p.m[:0], uint64(*(*uintptr)(k)), 10)) ; return nil case reflect.Bool : if *(*bool)(k) { p.k = "true" } else { p.k = "false" }; return nil - case reflect.Interface : return self.appendInterface(p, t, k) - case reflect.Struct, reflect.Ptr : return self.appendConcrete(p, t, k) - default : panic("unexpected map key type") + default : return vars.Error_type(t.Pack()) } } -func (self *MapIterator) appendConcrete(p *_MapPair, t *rt.GoType, k unsafe.Pointer) (err error) { +func (self *MapIterator) appendConcrete(p *_MapPair, t *rt.GoType, k unsafe.Pointer) error { // compiler has already checked that the type implements the encoding.MarshalText interface if !t.Indirect() { k = *(*unsafe.Pointer)(k) } + + // check the TextMarshaler interface eface := rt.GoEface{Value: k, Type: t}.Pack() - out, err := eface.(encoding.TextMarshaler).MarshalText() + e, ok := eface.(encoding.TextMarshaler) + if !ok { + return vars.Error_type(t.Pack()) + } + + // check for nil pointer + if t.Kind() == reflect.Ptr && k == nil { + p.k = "" + return nil + } + + out, err := e.MarshalText() if err != nil { return err } p.k = rt.Mem2Str(out) - return + return nil } func (self *MapIterator) appendInterface(p *_MapPair, t *rt.GoType, k unsafe.Pointer) (err error) { if len(rt.IfaceType(t).Methods) == 0 { panic("unexpected map key type") - } else if p.k, err = asText(k); err == nil { - return nil - } else { - return } + p.k, err = asText(k) + return } func IteratorStop(p *MapIterator) { @@ -206,3 +224,62 @@ func asText(v unsafe.Pointer) (string, error) { r, e := (*(*encoding.TextMarshaler)(unsafe.Pointer(&text))).MarshalText() return rt.Mem2Str(r), e } + +func IsValidNumber(s string) bool { + // This function implements the JSON numbers grammar. + // See https://tools.ietf.org/html/rfc7159#section-6 + // and https://www.json.org/img/number.png + + if s == "" { + return false + } + + // Optional - + if s[0] == '-' { + s = s[1:] + if s == "" { + return false + } + } + + // Digits + switch { + default: + return false + + case s[0] == '0': + s = s[1:] + + case '1' <= s[0] && s[0] <= '9': + s = s[1:] + for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { + s = s[1:] + } + } + + // . followed by 1 or more digits. + if len(s) >= 2 && s[0] == '.' && '0' <= s[1] && s[1] <= '9' { + s = s[2:] + for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { + s = s[1:] + } + } + + // e or E followed by an optional - or + and + // 1 or more digits. + if len(s) >= 2 && (s[0] == 'e' || s[0] == 'E') { + s = s[1:] + if s[0] == '+' || s[0] == '-' { + s = s[1:] + if s == "" { + return false + } + } + for len(s) > 0 && '0' <= s[0] && s[0] <= '9' { + s = s[1:] + } + } + + // Make sure we are at the end. + return s == "" +} diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/alg/primitives.go b/vendor/github.com/bytedance/sonic/internal/encoder/alg/primitives.go deleted file mode 100644 index e2610fbc8..000000000 --- a/vendor/github.com/bytedance/sonic/internal/encoder/alg/primitives.go +++ /dev/null @@ -1,104 +0,0 @@ -/** - * Copyright 2024 ByteDance Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package alg - -import ( - "encoding" - "encoding/json" - "reflect" - "unsafe" - - "github.com/bytedance/sonic/internal/encoder/vars" - "github.com/bytedance/sonic/internal/resolver" - "github.com/bytedance/sonic/internal/rt" -) - -func Compact(p *[]byte, v []byte) error { - buf := vars.NewBuffer() - err := json.Compact(buf, v) - - /* check for errors */ - if err != nil { - return err - } - - /* add to result */ - v = buf.Bytes() - *p = append(*p, v...) - - /* return the buffer into pool */ - vars.FreeBuffer(buf) - return nil -} - -func EncodeNil(rb *[]byte) error { - *rb = append(*rb, 'n', 'u', 'l', 'l') - return nil -} - -// func Make_EncodeTypedPointer(computor func(*rt.GoType, ...interface{}) (interface{}, error)) func(*[]byte, *rt.GoType, *unsafe.Pointer, *vars.Stack, uint64) error { -// return func(buf *[]byte, vt *rt.GoType, vp *unsafe.Pointer, sb *vars.Stack, fv uint64) error { -// if vt == nil { -// return EncodeNil(buf) -// } else if fn, err := vars.FindOrCompile(vt, (fv&(1<<BitPointerValue)) != 0, computor); err != nil { -// return err -// } else if vt.Indirect() { -// err := fn(buf, *vp, sb, fv) -// return err -// } else { -// err := fn(buf, unsafe.Pointer(vp), sb, fv) -// return err -// } -// } -// } - -func EncodeJsonMarshaler(buf *[]byte, val json.Marshaler, opt uint64) error { - if ret, err := val.MarshalJSON(); err != nil { - return err - } else { - if opt&(1<<BitCompactMarshaler) != 0 { - return Compact(buf, ret) - } - if opt&(1<<BitNoValidateJSONMarshaler) == 0 { - if ok, s := Valid(ret); !ok { - return vars.Error_marshaler(ret, s) - } - } - *buf = append(*buf, ret...) - return nil - } -} - -func EncodeTextMarshaler(buf *[]byte, val encoding.TextMarshaler, opt uint64) error { - if ret, err := val.MarshalText(); err != nil { - return err - } else { - if opt&(1<<BitNoQuoteTextMarshaler) != 0 { - *buf = append(*buf, ret...) - return nil - } - *buf = Quote(*buf, rt.Mem2Str(ret), false) - return nil - } -} - -func IsZero(val unsafe.Pointer, fv *resolver.FieldMeta) bool { - rv := reflect.NewAt(fv.Type, val).Elem() - b1 := fv.IsZero == nil && rv.IsZero() - b2 := fv.IsZero != nil && fv.IsZero(rv) - return b1 || b2 -} diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/alg/spec.go b/vendor/github.com/bytedance/sonic/internal/encoder/alg/spec.go index ecdbfb7bd..f98914961 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/alg/spec.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/alg/spec.go @@ -1,5 +1,5 @@ -//go:build (amd64 && go1.16 && !go1.25) || (arm64 && go1.20 && !go1.25) -// +build amd64,go1.16,!go1.25 arm64,go1.20,!go1.25 +//go:build (amd64 && go1.16 && !go1.26) || (arm64 && go1.20 && !go1.26) +// +build amd64,go1.16,!go1.26 arm64,go1.20,!go1.26 /** * Copyright 2024 ByteDance Inc. @@ -61,7 +61,6 @@ func Valid(data []byte) (ok bool, start int) { var typeByte = rt.UnpackEface(byte(0)).Type -//go:nocheckptr func Quote(buf []byte, val string, double bool) []byte { if len(val) == 0 { if double { @@ -77,6 +76,8 @@ func Quote(buf []byte, val string, double bool) []byte { } sp := rt.IndexChar(val, 0) nb := len(val) + + buf = rt.GuardSlice2(buf, nb+1) b := (*rt.GoSlice)(unsafe.Pointer(&buf)) // input buffer @@ -104,7 +105,9 @@ func Quote(buf []byte, val string, double bool) []byte { ret = ^ret // update input buffer nb -= ret - sp = unsafe.Pointer(uintptr(sp) + uintptr(ret)) + if nb > 0 { + sp = unsafe.Pointer(uintptr(sp) + uintptr(ret)) + } } runtime.KeepAlive(buf) diff --git a/vendor/github.com/bytedance/sonic/internal/encoder/alg/spec_compat.go b/vendor/github.com/bytedance/sonic/internal/encoder/alg/spec_compat.go index cd8369834..cd9beab04 100644 --- a/vendor/github.com/bytedance/sonic/internal/encoder/alg/spec_compat.go +++ b/vendor/github.com/bytedance/sonic/internal/encoder/alg/spec_compat.go @@ -1,4 +1,4 @@ -// +build !amd64,!arm64 go1.25 !go1.16 arm64,!go1.20 +// +build !amd64,!arm64 go1.26 !go1.16 arm64,!go1.20 /** * Copyright 2024 ByteDance Inc. |
