fix ASE loader crash when *MATERIAL_COUNT or *NUMSUBMTLS is not specified or is 0

code was doing vector[0u - 1] dereference in this case
pull/5559/head
Garux 2024-05-01 00:07:04 +05:00
parent 47ef79672e
commit 59d3dfaca7
1 changed files with 13 additions and 0 deletions

View File

@ -500,6 +500,13 @@ void Parser::ParseLV1MaterialListBlock() {
continue;
}
if (TokenMatch(filePtr, "MATERIAL", 8)) {
// ensure we have at least one material allocated
if (iMaterialCount == 0) {
LogWarning("*MATERIAL_COUNT unspecified or 0");
iMaterialCount = 1;
m_vMaterials.resize(iOldMaterialCount + iMaterialCount, Material("INVALID"));
}
unsigned int iIndex = 0;
ParseLV4MeshLong(iIndex);
@ -653,6 +660,12 @@ void Parser::ParseLV2MaterialBlock(ASE::Material &mat) {
}
// submaterial chunks
if (TokenMatch(filePtr, "SUBMATERIAL", 11)) {
// ensure we have at least one material allocated
if (iNumSubMaterials == 0) {
LogWarning("*NUMSUBMTLS unspecified or 0");
iNumSubMaterials = 1;
mat.avSubMaterials.resize(iNumSubMaterials, Material("INVALID SUBMATERIAL"));
}
unsigned int iIndex = 0;
ParseLV4MeshLong(iIndex);