fix(handlers): add error handling for swallowed repo/service errors

Several handler files discarded errors from repository and service
calls, creating nil-dereference risks and silent data corruption:

- guild_adventure: 3 GetByCharID calls could panic on nil guild
- gacha: GetGachaPoints silently returned zero balances on DB error
- house: HasApplication called before nil check on guild;
  GetHouseContents error discarded with 7 return values
- distitem: 3 distRepo calls had no error logging
- guild_ops: Disband/Leave service errors were invisible
- shop: gacha type/weight/fpoint lookups had no error logging
- discord: bcrypt error could result in nil password being set
This commit is contained in:
Houmgaor
2026-02-24 13:55:49 +01:00
parent 2f92b4ff62
commit 8fead0b1f3
8 changed files with 221 additions and 19 deletions

View File

@@ -32,7 +32,10 @@ func handleMsgMhfEnumerateDistItem(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfEnumerateDistItem)
bf := byteframe.NewByteFrame()
itemDists, _ := s.server.distRepo.List(s.charID, pkt.DistType)
itemDists, err := s.server.distRepo.List(s.charID, pkt.DistType)
if err != nil {
s.logger.Error("Failed to list item distributions", zap.Error(err))
}
bf.WriteUint16(uint16(len(itemDists)))
for _, dist := range itemDists {
@@ -108,7 +111,10 @@ func handleMsgMhfApplyDistItem(s *Session, p mhfpacket.MHFPacket) {
pkt := p.(*mhfpacket.MsgMhfApplyDistItem)
bf := byteframe.NewByteFrame()
bf.WriteUint32(pkt.DistributionID)
distItems, _ := s.server.distRepo.GetItems(pkt.DistributionID)
distItems, err := s.server.distRepo.GetItems(pkt.DistributionID)
if err != nil {
s.logger.Error("Failed to get distribution items", zap.Error(err))
}
bf.WriteUint16(uint16(len(distItems)))
for _, item := range distItems {
bf.WriteUint8(item.ItemType)
@@ -126,7 +132,10 @@ func handleMsgMhfAcquireDistItem(s *Session, p mhfpacket.MHFPacket) {
if pkt.DistributionID > 0 {
err := s.server.distRepo.RecordAccepted(pkt.DistributionID, s.charID)
if err == nil {
distItems, _ := s.server.distRepo.GetItems(pkt.DistributionID)
distItems, err := s.server.distRepo.GetItems(pkt.DistributionID)
if err != nil {
s.logger.Error("Failed to get distribution items for acquisition", zap.Error(err))
}
for _, item := range distItems {
switch item.ItemType {
case 17: