You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The player attempts to enter their own house. Server processes MSG_MHF_LOAD_HOUSE (0x00AA), ACKs, and ~1.3s later the client crashes (TCP forcibly closed by remote).
Response payload after the ACK header: 20 zero bytes. That comes from handlers_house.go:
ifhouseFurniture==nil {
houseFurniture=make([]byte, 20) // empty fallback
}
...case9: // Own housebf.WriteBytes(houseFurniture) // sends 20 zero bytes
GetHouseContents returns user_binary.house_furniture (repo_house.go:78). When NULL, the 20-zero fallback fires — and the ZZ client cannot parse it, so it crashes.
#92 (closed 2026-03-18) fixed corruption of the sibling house_tier column in user_binary on the save path (client sometimes wrote 0xFF..., wiping the theme).
This bug affects the adjacent house_furniture column on the load path. Both columns are read together by GetHouseContents. Worth checking whether the affected character's house_furniture is NULL (never initialized) or non-NULL but malformed:
SELECT length(house_furniture) FROM user_binary WHERE id =1;
If empty saves are reaching the column, the same detect-and-restore pattern from #92 may need to be extended to house_furniture (and possibly house_data, bookshelf, gallery, tore, garden).
Suggested fixes
Defensive (short-term): return doAckSimpleFail instead of 20 zero bytes when houseFurniture is nil for Destination=9. A failed ACK is recoverable; a client crash is not.
Correct fix: capture a real LOAD_HOUSE (Destination=9) response from a brand-new ZZ character to determine the correct empty-state encoding, and either initialize a default row on character creation or emit that exact shape from the fallback.
Repro
Server: 9.3.2 · Client: ZZ
Log in, attempt to enter own house → client crashes ~1s after the LOAD_HOUSE ACK.
Reported by
A user on Erupe 9.3.2, ZZ client.
Symptom
The player attempts to enter their own house. Server processes
MSG_MHF_LOAD_HOUSE(0x00AA), ACKs, and ~1.3s later the client crashes (TCP forcibly closed by remote).Server log
Diagnosis
Decoded request:
CharID=1(self),Destination=9(own house).Response payload after the ACK header: 20 zero bytes. That comes from
handlers_house.go:GetHouseContentsreturnsuser_binary.house_furniture(repo_house.go:78). When NULL, the 20-zero fallback fires — and the ZZ client cannot parse it, so it crashes.Possibly related: #92
#92 (closed 2026-03-18) fixed corruption of the sibling
house_tiercolumn inuser_binaryon the save path (client sometimes wrote0xFF..., wiping the theme).This bug affects the adjacent
house_furniturecolumn on the load path. Both columns are read together byGetHouseContents. Worth checking whether the affected character'shouse_furnitureis NULL (never initialized) or non-NULL but malformed:If empty saves are reaching the column, the same detect-and-restore pattern from #92 may need to be extended to
house_furniture(and possiblyhouse_data,bookshelf,gallery,tore,garden).Suggested fixes
doAckSimpleFailinstead of 20 zero bytes whenhouseFurnitureis nil forDestination=9. A failed ACK is recoverable; a client crash is not.LOAD_HOUSE(Destination=9) response from a brand-new ZZ character to determine the correct empty-state encoding, and either initialize a default row on character creation or emit that exact shape from the fallback.Repro
Code paths
server/channelserver/handlers_house.go(handleMsgMhfLoadHouse, ~L119–214)server/channelserver/repo_house.go(GetHouseContents, ~L76)server/channelserver/handlers_data.go(House Theme Disappears when login back to the game. #92 fix, ~L93–105)network/mhfpacket/msg_mhf_load_house.goSeverity
Critical — full client crash on a routine action, no in-game workaround.