From 8717fb9b55306b65dde58e2f472b7e6cdd133adc Mon Sep 17 00:00:00 2001 From: Houmgaor Date: Tue, 3 Mar 2026 18:04:33 +0100 Subject: [PATCH] fix(guild): add nil guards in cancel and answer scout handlers GetByID returns (nil, nil) for deleted guilds, and AnswerScout can return nil result on ErrApplicationMissing, both leading to nil dereferences. --- server/channelserver/handlers_guild_scout.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/server/channelserver/handlers_guild_scout.go b/server/channelserver/handlers_guild_scout.go index 252027b3a..8e390afb4 100644 --- a/server/channelserver/handlers_guild_scout.go +++ b/server/channelserver/handlers_guild_scout.go @@ -48,7 +48,7 @@ func handleMsgMhfCancelGuildScout(s *Session, p mhfpacket.MHFPacket) { guild, err := s.server.guildRepo.GetByID(guildCharData.GuildID) - if err != nil { + if err != nil || guild == nil { doAckBufFail(s, pkt.AckHandle, make([]byte, 4)) return } @@ -87,14 +87,19 @@ func handleMsgMhfAnswerGuildScout(s *Session, p mhfpacket.MHFPacket) { bf := byteframe.NewByteFrame() if result != nil && result.Success { bf.WriteUint32(0) + bf.WriteUint32(result.GuildID) } else { if errors.Is(err, ErrApplicationMissing) { s.logger.Warn("Guild invite missing, deleted?", zap.Uint32("charID", s.charID)) } bf.WriteUint32(7) + if result != nil { + bf.WriteUint32(result.GuildID) + } else { + bf.WriteUint32(0) + } } - bf.WriteUint32(result.GuildID) doAckBufSucceed(s, pkt.AckHandle, bf.Data()) }