fix(parsing): bail on suspicious maskBlockCount in CREATE_OBJECT blocks

When spline parsing consumes the wrong number of bytes, the subsequent
blockCount read lands on garbage data (e.g. 71 instead of ~5 for UNIT).
Previously the parser logged a warning but continued, reading garbage
mask/field data until hitting truncation. Now it returns false for
CREATE_OBJECT blocks with suspicious counts, letting the block loop
skip cleanly to the next entity.

Also downgrade ~44 diagnostic LOG_WARNING messages to LOG_DEBUG across
17 files (equipment, transport, DBC, heartbeat, chat, GO raypick, etc.)
to reduce log noise and make real warnings visible.
This commit is contained in:
Kelsi 2026-04-05 20:12:17 -07:00
parent e32f4fbff9
commit 069dd36698
18 changed files with 46 additions and 43 deletions

View file

@ -985,7 +985,7 @@ bool EntityController::applyPlayerStatFields(const std::map<uint16_t, uint32_t>&
// 0 = not resting, 1 = REST_TYPE_IN_TAVERN, 2 = REST_TYPE_IN_CITY
uint8_t restStateByte = static_cast<uint8_t>((val >> 24) & 0xFF);
if (isCreate) {
LOG_WARNING("PLAYER_BYTES_2 (CREATE): raw=0x", std::hex, val, std::dec,
LOG_DEBUG("PLAYER_BYTES_2 (CREATE): raw=0x", std::hex, val, std::dec,
" bankBagSlots=", static_cast<int>(bankBagSlots));
bool wasResting = owner_.isRestingRef();
owner_.isRestingRef() = (restStateByte != 0);