From a44b9679aaeca68d48a9774ba17495a0aab8de9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=98=99=E2=97=A6=20The=20Tablet=20=E2=9D=80=20GamerGirla?= =?UTF-8?q?ndCo=20=E2=97=A6=E2=9D=A7?= Date: Wed, 26 Mar 2025 21:36:54 -0400 Subject: [PATCH] fix panic caused by unsafe slice-casting operation in model.go --- model.go | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/model.go b/model.go index 13a7209..cab079d 100644 --- a/model.go +++ b/model.go @@ -7,7 +7,6 @@ import ( "go.mongodb.org/mongo-driver/v2/mongo" "go.mongodb.org/mongo-driver/v2/mongo/options" "reflect" - "unsafe" ) // Model - type which contains "static" methods like @@ -111,7 +110,12 @@ func (m *Model) Find(query interface{}, opts *options.FindOptionsBuilder) (*Quer op: OP_FIND_ALL, } q, err := m.FindRaw(query, opts) - idoc := (*DocumentSlice)(unsafe.Pointer(qqv.Elem().UnsafeAddr())) + //idoc := (*DocumentSlice)(qqv.Elem().UnsafePointer()) + idoc := make(DocumentSlice, 0) + for i := 0; i < qqv.Elem().Len(); i++ { + idoc = append(idoc, qqv.Elem().Index(i).Interface().(IDocument)) + } + if err == nil { rawRes := bson.A{} err = q.All(context.TODO(), &rawRes) @@ -125,7 +129,7 @@ func (m *Model) Find(query interface{}, opts *options.FindOptionsBuilder) (*Quer qq.reOrganize() err = nil } - for _, doc := range *idoc { + for _, doc := range idoc { doc.setModel(*m) } }