Avoid allocating more than 16k on stack in OCT loader.

Also avoid potential heap overwrites in there.
Sadly I have no examples for OCT files and it doesn't seem like a very common format as I couldn't even find any examples online.
So just assuming my changes work.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6291 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
cutealien
2022-01-08 17:30:06 +00:00
parent 98aed6ba67
commit 9e27a6d4bf
3 changed files with 21 additions and 11 deletions

View File

@ -102,18 +102,29 @@ IAnimatedMesh* COCTLoader::createMesh(io::IReadFile* file)
file->read(verts, sizeof(octVert) * header.numVerts);
file->read(faces, sizeof(octFace) * header.numFaces);
//TODO: Make sure id is in the legal range for Textures and Lightmaps
u32 i;
for (i = 0; i < header.numTextures; i++) {
octTexture t;
file->read(&t, sizeof(octTexture));
textures[t.id] = t;
for (i = 0; i < header.numTextures; i++)
{
u32 id;
file->read(&id, sizeof(id));
if ( id >= header.numTextures )
{
os::Printer::log("COCTLoader: Invalid texture id", irr::ELL_WARNING);
id = i;
}
file->read(&textures[id], sizeof(octTexture));
}
for (i = 0; i < header.numLightmaps; i++) {
octLightmap t;
file->read(&t, sizeof(octLightmap));
lightmaps[t.id] = t;
for (i = 0; i < header.numLightmaps; i++)
{
u32 id;
file->read(&id, sizeof(id));
if ( id >= header.numLightmaps )
{
os::Printer::log("COCTLoader: Invalid lightmap id", irr::ELL_WARNING);
id = i;
}
file->read(&lightmaps[id], sizeof(octLightmap));
}
file->read(lights, sizeof(octLight) * header.numLights);

View File

@ -115,12 +115,10 @@ namespace scene
};
struct octTexture {
u32 id;
char fileName[64];
};
struct octLightmap {
u32 id;
u8 data[128][128][3];
};