diff --git a/src/Components/Modules/AssetInterfaces/IMenuList.cpp b/src/Components/Modules/AssetInterfaces/IMenuList.cpp index dd9fd1fe..4cfc63d0 100644 --- a/src/Components/Modules/AssetInterfaces/IMenuList.cpp +++ b/src/Components/Modules/AssetInterfaces/IMenuList.cpp @@ -12,7 +12,7 @@ namespace Assets if (menus.empty()) return; // Allocate new menu list - Game::MenuList* newList = allocator->allocate(); + auto* newList = allocator->allocate(); if (!newList) return; newList->menus = allocator->allocateArray(menus.size()); @@ -35,7 +35,7 @@ namespace Assets } void IMenuList::mark(Game::XAssetHeader header, Components::ZoneBuilder::Zone* builder) { - Game::MenuList *asset = header.menuList; + auto* asset = header.menuList; for (int i = 0; i < asset->menuCount; ++i) { @@ -51,7 +51,7 @@ namespace Assets Utils::Stream* buffer = builder->getBuffer(); Game::MenuList* asset = header.menuList; - Game::MenuList* dest = buffer->dest(); + auto* dest = buffer->dest(); buffer->save(asset); @@ -67,7 +67,7 @@ namespace Assets { buffer->align(Utils::Stream::ALIGN_4); - Game::menuDef_t **destMenus = buffer->dest(); + auto** destMenus = buffer->dest(); buffer->saveArray(asset->menus, asset->menuCount); for (int i = 0; i < asset->menuCount; ++i) diff --git a/src/Components/Modules/AssetInterfaces/ImenuDef_t.cpp b/src/Components/Modules/AssetInterfaces/ImenuDef_t.cpp index b3ea1162..ec3c18be 100644 --- a/src/Components/Modules/AssetInterfaces/ImenuDef_t.cpp +++ b/src/Components/Modules/AssetInterfaces/ImenuDef_t.cpp @@ -11,7 +11,7 @@ namespace Assets // load from disk auto menus = Components::Menus::LoadMenu(Utils::String::VA("ui_mp/%s.menu", name.data())); - if (menus.size() == 0) return; + if (menus.empty()) return; if (menus.size() > 1) Components::Logger::Print("Menu '{}' on disk has more than one menudef in it. Only saving the first one\n", name); header->menu = menus[0].second; diff --git a/src/Components/Modules/Menus.cpp b/src/Components/Modules/Menus.cpp index ef726aed..ae04d35c 100644 --- a/src/Components/Modules/Menus.cpp +++ b/src/Components/Modules/Menus.cpp @@ -166,6 +166,13 @@ namespace Components } } + if (!menu->window.name) + { + allocator->free(menu->items); + allocator->free(menu); + return nullptr; + } + Menus::OverrideMenu(menu); Menus::RemoveMenu(menu->window.name); Menus::MenuList[menu->window.name] = menu; diff --git a/src/Components/Modules/ZoneBuilder.cpp b/src/Components/Modules/ZoneBuilder.cpp index 0a35ee71..38b73487 100644 --- a/src/Components/Modules/ZoneBuilder.cpp +++ b/src/Components/Modules/ZoneBuilder.cpp @@ -265,8 +265,10 @@ namespace Components if (asset->type != type) continue; - const char* assetName = Game::DB_GetXAssetName(asset); - if (assetName[0] == ',') ++assetName; + const auto* assetName = Game::DB_GetXAssetName(asset); + if (!assetName) return -1; + if (assetName[0] == ',' && assetName[1] != '\0') ++assetName; + else return -1; if (this->getAssetName(type, assetName) == name) {