fix: guard fsPath underflow, name WMO doodad mask, add why-comments

- asset_manager: add size guard before fsPath.substr(size-4) in
  tryLoadPngOverride — resolveFile could theoretically return a
  path shorter than the extension
- wmo_loader: name kDoodadNameIndexMask (0x00FFFFFF) with why-comment
  explaining the 24-bit name index / 8-bit flags packing and MODN
  string table reference
- window: add why-comment on LOG_WARNING usage during shutdown —
  intentionally elevated so teardown progress is visible at default
  log levels for crash diagnosis
This commit is contained in:
Kelsi 2026-03-30 14:33:08 -07:00
parent 1151785381
commit 086f32174f
3 changed files with 7 additions and 2 deletions

View file

@ -291,9 +291,11 @@ WMOModel WMOLoader::load(const std::vector<uint8_t>& wmoData) {
for (uint32_t i = 0; i < nDoodads; i++) {
WMODoodad doodad;
// Name index (3 bytes) + flags (1 byte)
// WMO doodad placement: name index packed in lower 24 bits, flags in upper 8.
// The name index is an offset into the MODN string table (doodad names).
constexpr uint32_t kDoodadNameIndexMask = 0x00FFFFFF;
uint32_t nameAndFlags = read<uint32_t>(wmoData, offset);
doodad.nameIndex = nameAndFlags & 0x00FFFFFF;
doodad.nameIndex = nameAndFlags & kDoodadNameIndexMask;
doodad.position.x = read<float>(wmoData, offset);
doodad.position.y = read<float>(wmoData, offset);