From 45b736db2d645c7044c5f5bd2d7e0a5c488a3084 Mon Sep 17 00:00:00 2001 From: wish Date: Wed, 12 Oct 2022 22:44:08 +1100 Subject: [PATCH] fix guild enumeration overflow --- server/channelserver/handlers_guild.go | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/server/channelserver/handlers_guild.go b/server/channelserver/handlers_guild.go index a45dfd4a4..e7c7d33d6 100644 --- a/server/channelserver/handlers_guild.go +++ b/server/channelserver/handlers_guild.go @@ -1260,9 +1260,16 @@ func handleMsgMhfEnumerateGuild(s *Session, p mhfpacket.MHFPacket) { bf = byteframe.NewByteFrame() if pkt.Type > 8 { - bf.WriteUint16(uint16(len(alliances))) + if len(guilds) > 10 { + bf.WriteUint16(10) + } else { + bf.WriteUint16(uint16(len(alliances))) + } bf.WriteUint8(0x00) // Unk - for _, alliance := range alliances { + for i, alliance := range alliances { + if i == 10 { + break + } bf.WriteUint32(alliance.ID) bf.WriteUint32(alliance.ParentGuild.LeaderCharID) bf.WriteUint16(alliance.TotalMembers) @@ -1281,9 +1288,16 @@ func handleMsgMhfEnumerateGuild(s *Session, p mhfpacket.MHFPacket) { bf.WriteBool(true) // TODO: Enable GuildAlliance applications } } else { - bf.WriteUint16(uint16(len(guilds))) + if len(guilds) > 10 { + bf.WriteUint16(10) + } else { + bf.WriteUint16(uint16(len(guilds))) + } bf.WriteUint8(0x01) // Unk - for _, guild := range guilds { + for i, guild := range guilds { + if i == 10 { + break + } bf.WriteUint32(guild.ID) bf.WriteUint32(guild.LeaderCharID) bf.WriteUint16(guild.MemberCount)