Commit 153c6825 authored by hybrid's avatar hybrid

Fix signedness of indices to read the correct array elements. Bug found by randomMesh.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@840 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 3253bc95
...@@ -879,8 +879,8 @@ void C3DSMeshFileLoader::composeObject(io::IReadFile* file, const core::stringc& ...@@ -879,8 +879,8 @@ void C3DSMeshFileLoader::composeObject(io::IReadFile* file, const core::stringc&
// no material group, so add all // no material group, so add all
SMaterialGroup group; SMaterialGroup group;
group.faceCount = CountFaces; group.faceCount = CountFaces;
group.faces = new s16[group.faceCount]; group.faces = new u16[group.faceCount];
for (int i=0; i<group.faceCount; ++i) for (u32 i=0; i<group.faceCount; ++i)
group.faces[i] = i; group.faces[i] = i;
MaterialGroups.push_back(group); MaterialGroups.push_back(group);
...@@ -1177,12 +1177,13 @@ void C3DSMeshFileLoader::readMaterialGroup(io::IReadFile* file, ChunkData& data) ...@@ -1177,12 +1177,13 @@ void C3DSMeshFileLoader::readMaterialGroup(io::IReadFile* file, ChunkData& data)
data.read += sizeof(group.faceCount); data.read += sizeof(group.faceCount);
// read faces // read faces
group.faces = new s16[group.faceCount]; group.faces = new u16[group.faceCount];
file->read(group.faces, sizeof(s16) * group.faceCount); file->read(group.faces, sizeof(u16) * group.faceCount);
#ifdef __BIG_ENDIAN__ #ifdef __BIG_ENDIAN__
for (int i=0;i<group.faceCount;i++) group.faces[i] = os::Byteswap::byteswap(group.faces[i]); for (u32 i=0;i<group.faceCount;++i)
group.faces[i] = os::Byteswap::byteswap(group.faces[i]);
#endif #endif
data.read += sizeof(s16) * group.faceCount; data.read += sizeof(u16) * group.faceCount;
MaterialGroups.push_back(group); MaterialGroups.push_back(group);
} }
......
...@@ -120,14 +120,14 @@ private: ...@@ -120,14 +120,14 @@ private:
{ {
MaterialName = o.MaterialName; MaterialName = o.MaterialName;
faceCount = o.faceCount; faceCount = o.faceCount;
faces = new s16[faceCount]; faces = new u16[faceCount];
for (s32 i=0; i<faceCount; ++i) for (u32 i=0; i<faceCount; ++i)
faces[i] = o.faces[i]; faces[i] = o.faces[i];
} }
core::stringc MaterialName; core::stringc MaterialName;
u16 faceCount; u16 faceCount;
s16* faces; u16* faces;
}; };
bool readChunk(io::IReadFile* file, ChunkData* parent); bool readChunk(io::IReadFile* file, ChunkData* parent);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment