diff --git a/server/internal/websocket/websocket.go b/server/internal/websocket/websocket.go index 257b318..6e65546 100644 --- a/server/internal/websocket/websocket.go +++ b/server/internal/websocket/websocket.go @@ -518,8 +518,11 @@ func WebSocketHandler(db *gorm.DB) func(*websocket.Conn) { ImageBuffer json.RawMessage `json:"imageBuffer"` } `json:"data"` } - if err := json.Unmarshal(msgBytes, &frameMsg); err == nil { - Hub.RelayFrameRaw(client.StudentID, eventMsg.Event, frameMsg.Data.ImageBuffer) + if err := json.Unmarshal(msgBytes, &frameMsg); err == nil && len(frameMsg.Data.ImageBuffer) > 0 { + // Copy slice to avoid memory race / corruption since WebSocket read buffer gets recycled + bufCopy := make([]byte, len(frameMsg.Data.ImageBuffer)) + copy(bufCopy, frameMsg.Data.ImageBuffer) + Hub.RelayFrameRaw(client.StudentID, eventMsg.Event, json.RawMessage(bufCopy)) } continue } diff --git a/server/server_test.exe b/server/server_test.exe index 91885a8..4e6071a 100644 Binary files a/server/server_test.exe and b/server/server_test.exe differ