From 51b9ef5c346f333e558eca38fd954464322f3b7d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Apr 2025 09:43:56 +0200 Subject: [chore]: Bump github.com/gin-contrib/gzip from 1.2.2 to 1.2.3 (#4000) Bumps [github.com/gin-contrib/gzip](https://github.com/gin-contrib/gzip) from 1.2.2 to 1.2.3. - [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.2.2...v1.2.3) --- updated-dependencies: - dependency-name: github.com/gin-contrib/gzip dependency-version: 1.2.3 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../sonic/internal/decoder/optdec/interface.go | 47 ++++++++++++---------- 1 file changed, 25 insertions(+), 22 deletions(-) (limited to 'vendor/github.com/bytedance/sonic/internal/decoder/optdec/interface.go') diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/optdec/interface.go b/vendor/github.com/bytedance/sonic/internal/decoder/optdec/interface.go index 0c063d55f..0285f0f8f 100644 --- a/vendor/github.com/bytedance/sonic/internal/decoder/optdec/interface.go +++ b/vendor/github.com/bytedance/sonic/internal/decoder/optdec/interface.go @@ -13,32 +13,44 @@ type efaceDecoder struct { } func (d *efaceDecoder) FromDom(vp unsafe.Pointer, node Node, ctx *context) error { - if node.IsNull() { - *(*interface{})(vp) = interface{}(nil) - return nil - } - - eface := *(*rt.GoEface)(vp) - - // not pointer type, or nil pointer, or *interface{} - if eface.Value == nil || eface.Type.Kind() != reflect.Ptr || rt.PtrElem(eface.Type) == anyType { + /* check the defined pointer type for issue 379 */ + eface := (*rt.GoEface)(vp) + + /* + not pointer type, or nil pointer, or self-pointed interface{}, such as + ```go + var v interface{} + v = &v + return v + ``` see `issue758_test.go`. + */ + if eface.Value == nil || eface.Type.Kind() != reflect.Ptr || eface.Value == vp { ret, err := node.AsEface(ctx) if err != nil { return err } - *(*interface{})(vp) = ret return nil } + if node.IsNull() { + if eface.Type.Indirect() || (!eface.Type.Indirect() && eface.Type.Pack().Elem().Kind() != reflect.Ptr) { + *(*interface{})(vp) = nil + return nil + } + } + etp := rt.PtrElem(eface.Type) vp = eface.Value - /* check the defined pointer type for issue 379 */ if eface.Type.IsNamed() { + // check named pointer type, avoid call its `Unmarshaler` newp := vp etp = eface.Type vp = unsafe.Pointer(&newp) + } else if !eface.Type.Indirect() { + // check direct value + etp = rt.UnpackType(eface.Type.Pack().Elem()) } dec, err := findOrCompile(etp) @@ -65,19 +77,10 @@ func (d *ifaceDecoder) FromDom(vp unsafe.Pointer, node Node, ctx *context) error } vt := iface.Itab.Vt - - // not pointer type, or nil pointer, or *interface{} - if vp == nil || vt.Kind() != reflect.Ptr || rt.PtrElem(vt) == anyType { - ret, err := node.AsEface(ctx) - if err != nil { - return err - } - - *(*interface{})(vp) = ret - return nil + if vt.Kind() != reflect.Ptr || iface.Value == nil { + return error_type(d.typ) } - etp := rt.PtrElem(vt) vp = iface.Value -- cgit v1.2.3