summaryrefslogtreecommitdiff
path: root/vendor/github.com/bytedance/sonic/internal/decoder/optdec/slice.go
diff options
context:
space:
mode:
authorLibravatar dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>2025-04-14 09:43:56 +0200
committerLibravatar GitHub <noreply@github.com>2025-04-14 09:43:56 +0200
commit51b9ef5c346f333e558eca38fd954464322f3b7d (patch)
treebf5cd0de887a27c1afc66345b1a464921d96e503 /vendor/github.com/bytedance/sonic/internal/decoder/optdec/slice.go
parent[docs] Remind the user that password resets don't work without restarting. (#... (diff)
downloadgotosocial-51b9ef5c346f333e558eca38fd954464322f3b7d.tar.xz
[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] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Diffstat (limited to 'vendor/github.com/bytedance/sonic/internal/decoder/optdec/slice.go')
-rw-r--r--vendor/github.com/bytedance/sonic/internal/decoder/optdec/slice.go27
1 files changed, 19 insertions, 8 deletions
diff --git a/vendor/github.com/bytedance/sonic/internal/decoder/optdec/slice.go b/vendor/github.com/bytedance/sonic/internal/decoder/optdec/slice.go
index a94e422b3..da7b12fc5 100644
--- a/vendor/github.com/bytedance/sonic/internal/decoder/optdec/slice.go
+++ b/vendor/github.com/bytedance/sonic/internal/decoder/optdec/slice.go
@@ -80,9 +80,13 @@ func (d *arrayDecoder) FromDom(vp unsafe.Pointer, node Node, ctx *context) error
}
/* zero rest of array */
- ptr := unsafe.Pointer(uintptr(vp) + uintptr(i)*d.elemType.Size)
+ addr := uintptr(vp) + uintptr(i)*d.elemType.Size
n := uintptr(d.len-i) * d.elemType.Size
- rt.ClearMemory(d.elemType, ptr, n)
+
+ /* the boundary pointer may points to another unknown object, so we need to avoid using it */
+ if n != 0 {
+ rt.ClearMemory(d.elemType, unsafe.Pointer(addr), n)
+ }
return gerr
}
@@ -95,7 +99,18 @@ func (d *sliceEfaceDecoder) FromDom(vp unsafe.Pointer, node Node, ctx *context)
return nil
}
- return node.AsSliceEface(ctx, vp)
+ /* if slice is empty, just call `AsSliceEface` */
+ if ((*rt.GoSlice)(vp)).Len == 0 {
+ return node.AsSliceEface(ctx, vp)
+ }
+
+ decoder := sliceDecoder{
+ elemType: rt.AnyType,
+ elemDec: &efaceDecoder{},
+ typ: rt.SliceEfaceType.Pack(),
+ }
+
+ return decoder.FromDom(vp, node, ctx)
}
type sliceI32Decoder struct {
@@ -168,12 +183,8 @@ func (d *sliceBytesDecoder) FromDom(vp unsafe.Pointer, node Node, ctx *context)
}
s, err := node.AsSliceBytes(ctx)
- if err != nil {
- return err
- }
-
*(*[]byte)(vp) = s
- return nil
+ return err
}
type sliceBytesUnmarshalerDecoder struct {