mirror of
https://github.com/Mezeporta/Erupe.git
synced 2026-03-22 07:32:32 +01:00
fix: log SJIS decoding errors instead of silently discarding them
Add SJISToUTF8Lossy() that wraps SJISToUTF8() and logs decode errors at slog.Debug level. Replace all 31 call sites across 17 files that previously discarded the error with `_, _ =`. This makes garbled text from malformed SJIS client data debuggable without adding noise at default log levels.
This commit is contained in:
@@ -194,7 +194,7 @@ func handleMsgMhfLoaddata(s *Session, p mhfpacket.MHFPacket) {
|
||||
_, _ = bf.Seek(88, io.SeekStart)
|
||||
name := bf.ReadNullTerminatedBytes()
|
||||
s.server.userBinary.Set(s.charID, 1, append(name, []byte{0x00}...))
|
||||
s.Name, _ = stringsupport.SJISToUTF8(name)
|
||||
s.Name = stringsupport.SJISToUTF8Lossy(name)
|
||||
}
|
||||
|
||||
func handleMsgMhfSaveScenarioData(s *Session, p mhfpacket.MHFPacket) {
|
||||
|
||||
@@ -287,14 +287,14 @@ func handleMsgMhfEnumerateGuild(s *Session, p mhfpacket.MHFPacket) {
|
||||
if err == nil {
|
||||
switch pkt.Type {
|
||||
case mhfpacket.ENUMERATE_GUILD_TYPE_GUILD_NAME:
|
||||
searchName, _ := stringsupport.SJISToUTF8(pkt.Data2.ReadNullTerminatedBytes())
|
||||
searchName := stringsupport.SJISToUTF8Lossy(pkt.Data2.ReadNullTerminatedBytes())
|
||||
for _, guild := range tempGuilds {
|
||||
if strings.Contains(guild.Name, searchName) {
|
||||
guilds = append(guilds, guild)
|
||||
}
|
||||
}
|
||||
case mhfpacket.ENUMERATE_GUILD_TYPE_LEADER_NAME:
|
||||
searchName, _ := stringsupport.SJISToUTF8(pkt.Data2.ReadNullTerminatedBytes())
|
||||
searchName := stringsupport.SJISToUTF8Lossy(pkt.Data2.ReadNullTerminatedBytes())
|
||||
for _, guild := range tempGuilds {
|
||||
if strings.Contains(guild.LeaderName, searchName) {
|
||||
guilds = append(guilds, guild)
|
||||
@@ -364,14 +364,14 @@ func handleMsgMhfEnumerateGuild(s *Session, p mhfpacket.MHFPacket) {
|
||||
tempAlliances, err = s.server.guildRepo.ListAlliances()
|
||||
switch pkt.Type {
|
||||
case mhfpacket.ENUMERATE_ALLIANCE_TYPE_ALLIANCE_NAME:
|
||||
searchName, _ := stringsupport.SJISToUTF8(pkt.Data2.ReadNullTerminatedBytes())
|
||||
searchName := stringsupport.SJISToUTF8Lossy(pkt.Data2.ReadNullTerminatedBytes())
|
||||
for _, alliance := range tempAlliances {
|
||||
if strings.Contains(alliance.Name, searchName) {
|
||||
alliances = append(alliances, alliance)
|
||||
}
|
||||
}
|
||||
case mhfpacket.ENUMERATE_ALLIANCE_TYPE_LEADER_NAME:
|
||||
searchName, _ := stringsupport.SJISToUTF8(pkt.Data2.ReadNullTerminatedBytes())
|
||||
searchName := stringsupport.SJISToUTF8Lossy(pkt.Data2.ReadNullTerminatedBytes())
|
||||
for _, alliance := range tempAlliances {
|
||||
if strings.Contains(alliance.ParentGuild.LeaderName, searchName) {
|
||||
alliances = append(alliances, alliance)
|
||||
|
||||
@@ -108,7 +108,7 @@ func handleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) {
|
||||
doAckSimpleFail(s, pkt.AckHandle, make([]byte, 4))
|
||||
return
|
||||
}
|
||||
guild.Comment, _ = stringsupport.SJISToUTF8(pkt.Data2.ReadNullTerminatedBytes())
|
||||
guild.Comment = stringsupport.SJISToUTF8Lossy(pkt.Data2.ReadNullTerminatedBytes())
|
||||
if err := s.server.guildRepo.Save(guild); err != nil {
|
||||
s.logger.Error("Failed to save guild comment", zap.Error(err))
|
||||
}
|
||||
@@ -168,7 +168,7 @@ func handleMsgMhfOperateGuild(s *Session, p mhfpacket.MHFPacket) {
|
||||
}
|
||||
|
||||
func handleRenamePugi(s *Session, bf *byteframe.ByteFrame, guild *Guild, num int) {
|
||||
name, _ := stringsupport.SJISToUTF8(bf.ReadNullTerminatedBytes())
|
||||
name := stringsupport.SJISToUTF8Lossy(bf.ReadNullTerminatedBytes())
|
||||
switch num {
|
||||
case 1:
|
||||
guild.PugiName1 = name
|
||||
|
||||
@@ -489,7 +489,7 @@ func handleMsgMhfTransitMessage(s *Session, p mhfpacket.MHFPacket) {
|
||||
bf.ReadUint16() // term length
|
||||
maxResults = bf.ReadUint16()
|
||||
bf.ReadUint8() // Unk
|
||||
term, _ = stringsupport.SJISToUTF8(bf.ReadNullTerminatedBytes())
|
||||
term = stringsupport.SJISToUTF8Lossy(bf.ReadNullTerminatedBytes())
|
||||
case 3:
|
||||
_ip := bf.ReadBytes(4)
|
||||
ip = fmt.Sprintf("%d.%d.%d.%d", _ip[3], _ip[2], _ip[1], _ip[0])
|
||||
|
||||
@@ -172,7 +172,7 @@ const (
|
||||
)
|
||||
|
||||
func (save *CharacterSaveData) updateStructWithSaveData() {
|
||||
save.Name, _ = stringsupport.SJISToUTF8(bfutil.UpToNull(save.decompSave[saveFieldNameOffset : saveFieldNameOffset+saveFieldNameLen]))
|
||||
save.Name = stringsupport.SJISToUTF8Lossy(bfutil.UpToNull(save.decompSave[saveFieldNameOffset : saveFieldNameOffset+saveFieldNameLen]))
|
||||
if save.decompSave[save.Pointers[pGender]] == 1 {
|
||||
save.Gender = true
|
||||
} else {
|
||||
|
||||
Reference in New Issue
Block a user