forked from Mirrorlandia_minetest/irrlicht
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:
parent
98aed6ba67
commit
9e27a6d4bf
@ -1,5 +1,6 @@
|
|||||||
--------------------------
|
--------------------------
|
||||||
Changes in 1.9 (not yet released)
|
Changes in 1.9 (not yet released)
|
||||||
|
- Avoid allocating more than 16k on stack in OCT loader. Also avoid potential heap overwrites in there.
|
||||||
- obj file loader now allows using mtl files with spaces in the filename.
|
- obj file loader now allows using mtl files with spaces in the filename.
|
||||||
Note that this means it no longer handles obj files which have multiple mtl files behind the mtllib command.
|
Note that this means it no longer handles obj files which have multiple mtl files behind the mtllib command.
|
||||||
But Irrlicht ignored all but the first name anyway and this way of handling mtllib commands seems to be more common.
|
But Irrlicht ignored all but the first name anyway and this way of handling mtllib commands seems to be more common.
|
||||||
|
@ -102,18 +102,29 @@ IAnimatedMesh* COCTLoader::createMesh(io::IReadFile* file)
|
|||||||
|
|
||||||
file->read(verts, sizeof(octVert) * header.numVerts);
|
file->read(verts, sizeof(octVert) * header.numVerts);
|
||||||
file->read(faces, sizeof(octFace) * header.numFaces);
|
file->read(faces, sizeof(octFace) * header.numFaces);
|
||||||
//TODO: Make sure id is in the legal range for Textures and Lightmaps
|
|
||||||
|
|
||||||
u32 i;
|
u32 i;
|
||||||
for (i = 0; i < header.numTextures; i++) {
|
for (i = 0; i < header.numTextures; i++)
|
||||||
octTexture t;
|
{
|
||||||
file->read(&t, sizeof(octTexture));
|
u32 id;
|
||||||
textures[t.id] = t;
|
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++) {
|
for (i = 0; i < header.numLightmaps; i++)
|
||||||
octLightmap t;
|
{
|
||||||
file->read(&t, sizeof(octLightmap));
|
u32 id;
|
||||||
lightmaps[t.id] = t;
|
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);
|
file->read(lights, sizeof(octLight) * header.numLights);
|
||||||
|
|
||||||
|
@ -115,12 +115,10 @@ namespace scene
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct octTexture {
|
struct octTexture {
|
||||||
u32 id;
|
|
||||||
char fileName[64];
|
char fileName[64];
|
||||||
};
|
};
|
||||||
|
|
||||||
struct octLightmap {
|
struct octLightmap {
|
||||||
u32 id;
|
|
||||||
u8 data[128][128][3];
|
u8 data[128][128][3];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user