Skip to content

Commit 8688ca5

Browse files
committed
Go issue #58625 possible missuse of unsafe.pointer bypass
1 parent 275c5be commit 8688ca5

File tree

1 file changed

+8
-2
lines changed

1 file changed

+8
-2
lines changed

server_handler.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ func (is *IedServer) SetHandleWriteAccess(modelNode *ModelNode, handler WriteAcc
177177

178178
callbackId := callbackIdGen.Add(1)
179179
// 将 int 转为 uintptr,再转为 unsafe.Pointer
180-
cPtr := unsafe.Pointer(uintptr(callbackId))
180+
cPtr := intToPointerBug58625(callbackId)
181181
writeAccessCallbacks[callbackId] = &writeAccessCallback{
182182
node: modelNode,
183183
handler: handler,
@@ -193,7 +193,7 @@ func (is *IedServer) SetControlHandler(modelNode *ModelNode, handler ControlHand
193193

194194
callbackId := callbackIdGen.Add(1)
195195
// 将 int 转为 uintptr,再转为 unsafe.Pointer
196-
cPtr := unsafe.Pointer(uintptr(callbackId))
196+
cPtr := intToPointerBug58625(callbackId)
197197
controlCallbacks[callbackId] = &controlCallback{
198198
node: modelNode,
199199
handler: handler,
@@ -202,6 +202,12 @@ func (is *IedServer) SetControlHandler(modelNode *ModelNode, handler ControlHand
202202
C.IedServer_setControlHandler(is.server, (*C.DataObject)(modelNode._modelNode), (*[0]byte)(C.controlHandlerBridge), cPtr)
203203
}
204204

205+
// intToPointerBug58625 is a helper function to fix issue #58625 in Go | https://github.com/golang/go/issues/58625
206+
func intToPointerBug58625(i int32) unsafe.Pointer {
207+
var intPtr = uintptr(i)
208+
return *(*unsafe.Pointer)(unsafe.Pointer(&intPtr))
209+
}
210+
205211
func (is *IedServer) SetAuthenticator(clientAuthenticator ClientAuthenticator) {
206212
is.clientAuthenticator = clientAuthenticator
207213
cPtr := unsafe.Pointer(is)

0 commit comments

Comments
 (0)