terminate session on save corruption

This commit is contained in:
wish
2022-12-23 23:12:01 +11:00
parent 00d3c05e6e
commit 7676f2e7d5
2 changed files with 11 additions and 5 deletions

View File

@@ -2,6 +2,8 @@ package channelserver
import ( import (
"encoding/binary" "encoding/binary"
"erupe-ce/common/bfutil"
"erupe-ce/common/stringsupport"
"erupe-ce/network/mhfpacket" "erupe-ce/network/mhfpacket"
"erupe-ce/server/channelserver/compression/nullcomp" "erupe-ce/server/channelserver/compression/nullcomp"
@@ -135,6 +137,7 @@ func (save *CharacterSaveData) updateSaveDataWithStruct() {
// This will update the save struct with the values stored in the character save // This will update the save struct with the values stored in the character save
func (save *CharacterSaveData) updateStructWithSaveData() { func (save *CharacterSaveData) updateStructWithSaveData() {
save.Name = stringsupport.SJISToUTF8(bfutil.UpToNull(save.decompSave[88:100]))
if save.decompSave[pointerGender] == 1 { if save.decompSave[pointerGender] == 1 {
save.Gender = true save.Gender = true
} else { } else {

View File

@@ -2,7 +2,6 @@ package channelserver
import ( import (
"encoding/hex" "encoding/hex"
"erupe-ce/common/bfutil"
"erupe-ce/common/stringsupport" "erupe-ce/common/stringsupport"
"fmt" "fmt"
"io" "io"
@@ -46,10 +45,14 @@ func handleMsgMhfSavedata(s *Session, p mhfpacket.MHFPacket) {
characterSaveData.decompSave = saveData characterSaveData.decompSave = saveData
} }
characterSaveData.updateStructWithSaveData() characterSaveData.updateStructWithSaveData()
characterSaveData.Save(s) if characterSaveData.Name == s.Name {
s.logger.Info("Wrote recompressed savedata back to DB.") characterSaveData.Save(s)
s.logger.Info("Wrote recompressed savedata back to DB.")
characterSaveData.Name = stringsupport.SJISToUTF8(bfutil.UpToNull(characterSaveData.decompSave[88:100])) } else {
s.logger.Warn("Save cancelled due to corruption.")
s.rawConn.Close()
return
}
_, err = s.server.db.Exec("UPDATE characters SET name=$1 WHERE id=$2", characterSaveData.Name, s.charID) _, err = s.server.db.Exec("UPDATE characters SET name=$1 WHERE id=$2", characterSaveData.Name, s.charID)
if err != nil { if err != nil {
s.logger.Fatal("Failed to update character name in db", zap.Error(err)) s.logger.Fatal("Failed to update character name in db", zap.Error(err))