From ae8741dbd21d557a58ec6912b54f1bea34cdbeed Mon Sep 17 00:00:00 2001 From: wish Date: Mon, 24 Oct 2022 05:04:28 +1100 Subject: [PATCH] prevent panic on nil stage --- server/channelserver/handlers.go | 12 +++++------- server/channelserver/handlers_stage.go | 4 ++-- server/channelserver/sys_stage.go | 2 +- 3 files changed, 8 insertions(+), 10 deletions(-) diff --git a/server/channelserver/handlers.go b/server/channelserver/handlers.go index cc5f57d9b..a4d7e9e14 100644 --- a/server/channelserver/handlers.go +++ b/server/channelserver/handlers.go @@ -191,13 +191,11 @@ func logoutPlayer(s *Session) { for _, stage := range s.server.stages { // Tell sessions registered to disconnecting players quest to unregister - if stage.hostCharID == s.charID { - if s.stage.id == "sl1Ns200p0a0u0" { - for _, sess := range s.server.sessions { - for rSlot := range stage.reservedClientSlots { - if sess.charID == rSlot { - sess.QueueSendMHF(&mhfpacket.MsgSysStageDestruct{}) - } + if stage.host.charID == s.charID { + for _, sess := range s.server.sessions { + for rSlot := range stage.reservedClientSlots { + if sess.charID == rSlot && sess.stage != nil && sess.stage.id == "sl1Ns200p0a0u0" { + sess.QueueSendMHF(&mhfpacket.MsgSysStageDestruct{}) } } } diff --git a/server/channelserver/handlers_stage.go b/server/channelserver/handlers_stage.go index cc98417c6..90ecdec99 100644 --- a/server/channelserver/handlers_stage.go +++ b/server/channelserver/handlers_stage.go @@ -19,7 +19,7 @@ func handleMsgSysCreateStage(s *Session, p mhfpacket.MHFPacket) { doAckSimpleFail(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) } else { stage := NewStage(pkt.StageID) - stage.hostCharID = s.charID + stage.host = s stage.maxPlayers = uint16(pkt.PlayerCount) s.server.stages[stage.id] = stage doAckSimpleSucceed(s, pkt.AckHandle, []byte{0x00, 0x00, 0x00, 0x00}) @@ -43,7 +43,7 @@ func doStageTransfer(s *Session, ackHandle uint32, stageID string) { stage = s.server.stages[stageID] s.server.Unlock() stage.Lock() - stage.hostCharID = s.charID + stage.host = s stage.clients[s] = s.charID stage.Unlock() } diff --git a/server/channelserver/sys_stage.go b/server/channelserver/sys_stage.go index 49e454749..4cd96a7f8 100644 --- a/server/channelserver/sys_stage.go +++ b/server/channelserver/sys_stage.go @@ -46,7 +46,7 @@ type Stage struct { // other clients expect the server to echo them back in the exact same format. rawBinaryData map[stageBinaryKey][]byte - hostCharID uint32 + host *Session maxPlayers uint16 password string createdAt string