diff --git a/code/AssetLib/glTF/glTFCommon.h b/code/AssetLib/glTF/glTFCommon.h index 78d40ce2c..14b82aa29 100644 --- a/code/AssetLib/glTF/glTFCommon.h +++ b/code/AssetLib/glTF/glTFCommon.h @@ -300,7 +300,7 @@ public: inline unsigned int GetIndex() const { return index; } - operator bool() const { return vector != 0; } + operator bool() const { return vector != nullptr && index < vector->size(); } T *operator->() { return (*vector)[index]; } diff --git a/code/AssetLib/glTF2/glTF2Asset.inl b/code/AssetLib/glTF2/glTF2Asset.inl index ffe528757..f35a47efa 100644 --- a/code/AssetLib/glTF2/glTF2Asset.inl +++ b/code/AssetLib/glTF2/glTF2Asset.inl @@ -600,6 +600,10 @@ inline void Buffer::Read(Value &obj, Asset &r) { inline bool Buffer::LoadFromStream(IOStream &stream, size_t length, size_t baseOffset) { byteLength = length ? length : stream.FileSize(); + if (byteLength > stream.FileSize()) { + throw DeadlyImportError("GLTF: Invalid byteLength exceeds size of actual data."); + } + if (baseOffset) { stream.Seek(baseOffset, aiOrigin_SET); } diff --git a/include/assimp/Vertex.h b/include/assimp/Vertex.h index ad5ff476c..f2e5572d3 100644 --- a/include/assimp/Vertex.h +++ b/include/assimp/Vertex.h @@ -135,7 +135,9 @@ public: /** Extract a particular vertex from a anim mesh and interleave all components */ explicit Vertex(const aiAnimMesh* msh, unsigned int idx) { ai_assert(idx < msh->mNumVertices); - position = msh->mVertices[idx]; + if (msh->HasPositions()) { + position = msh->mVertices[idx]; + } if (msh->HasNormals()) { normal = msh->mNormals[idx];