fix assimp ASE loader crash when *MATERIAL_COUNT or *NUMSUBMTLS is not specified or is 0
code was doing vector[0u - 1] dereference in this case
This commit is contained in:
parent
d4e1be39ad
commit
648a836c5c
|
|
@ -482,6 +482,13 @@ void Parser::ParseLV1MaterialListBlock() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (TokenMatch(filePtr, "MATERIAL", 8)) {
|
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;
|
unsigned int iIndex = 0;
|
||||||
ParseLV4MeshLong(iIndex);
|
ParseLV4MeshLong(iIndex);
|
||||||
|
|
||||||
|
|
@ -634,6 +641,12 @@ void Parser::ParseLV2MaterialBlock(ASE::Material &mat) {
|
||||||
}
|
}
|
||||||
// submaterial chunks
|
// submaterial chunks
|
||||||
if (TokenMatch(filePtr, "SUBMATERIAL", 11)) {
|
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;
|
unsigned int iIndex = 0;
|
||||||
ParseLV4MeshLong(iIndex);
|
ParseLV4MeshLong(iIndex);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user