From e741e7aec6fe479d6eb638c08564bcee707e3633 Mon Sep 17 00:00:00 2001 From: Giuseppe Barbieri Date: Sat, 2 Dec 2017 23:16:10 +0100 Subject: [PATCH 01/17] Update MD5Loader.h --- code/MD5Loader.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/MD5Loader.h b/code/MD5Loader.h index 9dfc08226..a68655f55 100644 --- a/code/MD5Loader.h +++ b/code/MD5Loader.h @@ -144,7 +144,7 @@ protected: // ------------------------------------------------------------------- /** Load the contents of a specific file into memory and - * alocates a buffer to keep it. + * allocates a buffer to keep it. * * mBuffer is modified to point to this buffer. * @param pFile File stream to be read From 3e0b072263fd27b4fb709aea77ef2bf5182c0b67 Mon Sep 17 00:00:00 2001 From: Giuseppe Barbieri Date: Sat, 9 Dec 2017 23:42:23 +0100 Subject: [PATCH 02/17] Update FBXBinaryTokenizer.cpp --- code/FBXBinaryTokenizer.cpp | 5 ----- 1 file changed, 5 deletions(-) diff --git a/code/FBXBinaryTokenizer.cpp b/code/FBXBinaryTokenizer.cpp index 550859345..be73eaa95 100644 --- a/code/FBXBinaryTokenizer.cpp +++ b/code/FBXBinaryTokenizer.cpp @@ -435,11 +435,6 @@ void TokenizeBinary(TokenList& output_tokens, const char* input, unsigned int le TokenizeError("file is too short",0); } - if (strncmp(input,"Kaydara FBX Binary",18)) { - TokenizeError("magic bytes not found",0); - } - - //uint32_t offset = 0x15; const char* cursor = input + 0x15; From 30ae14fae9ca2d2a2aaa185395c75e615518af87 Mon Sep 17 00:00:00 2001 From: Turo Lamminen Date: Tue, 12 Dec 2017 18:40:28 +0200 Subject: [PATCH 03/17] B3DImporter: Add unique_to_array helper function --- code/B3DImporter.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/code/B3DImporter.cpp b/code/B3DImporter.cpp index bc888fb66..46008bf31 100644 --- a/code/B3DImporter.cpp +++ b/code/B3DImporter.cpp @@ -267,6 +267,21 @@ T *B3DImporter::to_array( const vector &v ){ return p; } + +// ------------------------------------------------------------------------------------------------ +template +T **unique_to_array( vector > &v ){ + if( v.empty() ) { + return 0; + } + T **p = new T*[ v.size() ]; + for( size_t i = 0; i < v.size(); ++i ){ + p[i] = v[i].release(); + } + return p; +} + + // ------------------------------------------------------------------------------------------------ void B3DImporter::ReadTEXS(){ while( ChunkSize() ){ From acab4c327e53d9cdd468536861a5f5575ff7ae51 Mon Sep 17 00:00:00 2001 From: Turo Lamminen Date: Tue, 12 Dec 2017 18:42:14 +0200 Subject: [PATCH 04/17] B3DImporter: Store animations in unique_ptr --- code/B3DImporter.cpp | 10 ++++------ code/B3DImporter.h | 3 ++- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/code/B3DImporter.cpp b/code/B3DImporter.cpp index 46008bf31..b3a01c79c 100644 --- a/code/B3DImporter.cpp +++ b/code/B3DImporter.cpp @@ -93,7 +93,6 @@ void DeleteAllBarePointers(std::vector& x) B3DImporter::~B3DImporter() { - DeleteAllBarePointers(_animations); } // ------------------------------------------------------------------------------------------------ @@ -515,11 +514,11 @@ void B3DImporter::ReadANIM(){ int frames=ReadInt(); float fps=ReadFloat(); - aiAnimation *anim=new aiAnimation; - _animations.push_back( anim ); + std::unique_ptr anim(new aiAnimation); anim->mDuration=frames; anim->mTicksPerSecond=fps; + _animations.emplace_back( std::move(anim) ); } // ------------------------------------------------------------------------------------------------ @@ -601,7 +600,6 @@ void B3DImporter::ReadBB3D( aiScene *scene ){ _nodeAnims.clear(); - DeleteAllBarePointers(_animations); _animations.clear(); string t=ReadChunk(); @@ -715,12 +713,12 @@ void B3DImporter::ReadBB3D( aiScene *scene ){ //animations if( _animations.size()==1 && _nodeAnims.size() ){ - aiAnimation *anim=_animations.back(); + aiAnimation *anim = _animations.back().get(); anim->mNumChannels=static_cast(_nodeAnims.size()); anim->mChannels=to_array( _nodeAnims ); scene->mNumAnimations=static_cast(_animations.size()); - scene->mAnimations=to_array( _animations ); + scene->mAnimations=unique_to_array( _animations ); } // convert to RH diff --git a/code/B3DImporter.h b/code/B3DImporter.h index 94644edd4..b283cfab6 100644 --- a/code/B3DImporter.h +++ b/code/B3DImporter.h @@ -49,6 +49,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include "BaseImporter.h" +#include #include struct aiNodeAnim; @@ -124,7 +125,7 @@ private: std::vector _nodes; std::vector _meshes; std::vector _nodeAnims; - std::vector _animations; + std::vector > _animations; }; } From f1707e920d9b0534757326dd5786e44774eae6a3 Mon Sep 17 00:00:00 2001 From: Turo Lamminen Date: Tue, 12 Dec 2017 18:54:41 +0200 Subject: [PATCH 05/17] B3DImporter: Store meshes in unique_ptr --- code/B3DImporter.cpp | 9 +++++---- code/B3DImporter.h | 2 +- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/code/B3DImporter.cpp b/code/B3DImporter.cpp index b3a01c79c..d764bd530 100644 --- a/code/B3DImporter.cpp +++ b/code/B3DImporter.cpp @@ -400,8 +400,7 @@ void B3DImporter::ReadTRIS( int v0 ){ Fail( "Bad material id" ); } - aiMesh *mesh=new aiMesh; - _meshes.push_back( mesh ); + std::unique_ptr mesh(new aiMesh); mesh->mMaterialIndex=matid; mesh->mNumFaces=0; @@ -429,6 +428,8 @@ void B3DImporter::ReadTRIS( int v0 ){ ++mesh->mNumFaces; ++face; } + + _meshes.emplace_back( std::move(mesh) ); } // ------------------------------------------------------------------------------------------------ @@ -635,7 +636,7 @@ void B3DImporter::ReadBB3D( aiScene *scene ){ aiNode *node=_nodes[i]; for( size_t j=0;jmNumMeshes;++j ){ - aiMesh *mesh=_meshes[node->mMeshes[j]]; + aiMesh *mesh = _meshes[node->mMeshes[j]].get(); int n_tris=mesh->mNumFaces; int n_verts=mesh->mNumVertices=n_tris * 3; @@ -708,7 +709,7 @@ void B3DImporter::ReadBB3D( aiScene *scene ){ //meshes scene->mNumMeshes= static_cast(_meshes.size()); - scene->mMeshes=to_array( _meshes ); + scene->mMeshes = unique_to_array( _meshes ); //animations if( _animations.size()==1 && _nodeAnims.size() ){ diff --git a/code/B3DImporter.h b/code/B3DImporter.h index b283cfab6..ef36c4618 100644 --- a/code/B3DImporter.h +++ b/code/B3DImporter.h @@ -123,7 +123,7 @@ private: std::vector _vertices; std::vector _nodes; - std::vector _meshes; + std::vector > _meshes; std::vector _nodeAnims; std::vector > _animations; }; From 08a35d4e1f44030276293d4a64863e802cee8464 Mon Sep 17 00:00:00 2001 From: Turo Lamminen Date: Tue, 12 Dec 2017 19:16:06 +0200 Subject: [PATCH 06/17] B3DImporter: Store materials in unique_ptr --- code/B3DImporter.cpp | 8 ++++---- code/B3DImporter.h | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/B3DImporter.cpp b/code/B3DImporter.cpp index d764bd530..195ee04a8 100644 --- a/code/B3DImporter.cpp +++ b/code/B3DImporter.cpp @@ -309,8 +309,7 @@ void B3DImporter::ReadBRUS(){ /*int blend=**/ReadInt(); int fx=ReadInt(); - aiMaterial *mat=new aiMaterial; - _materials.push_back( mat ); + std::unique_ptr mat(new aiMaterial); // Name aiString ainame( name ); @@ -347,6 +346,7 @@ void B3DImporter::ReadBRUS(){ mat->AddProperty( &texname,AI_MATKEY_TEXTURE_DIFFUSE(0) ); } } + _materials.emplace_back( std::move(mat) ); } } @@ -702,10 +702,10 @@ void B3DImporter::ReadBB3D( aiScene *scene ){ //material if( !_materials.size() ){ - _materials.push_back( new aiMaterial ); + _materials.emplace_back( std::unique_ptr(new aiMaterial) ); } scene->mNumMaterials= static_cast(_materials.size()); - scene->mMaterials=to_array( _materials ); + scene->mMaterials = unique_to_array( _materials ); //meshes scene->mNumMeshes= static_cast(_meshes.size()); diff --git a/code/B3DImporter.h b/code/B3DImporter.h index ef36c4618..f9645f594 100644 --- a/code/B3DImporter.h +++ b/code/B3DImporter.h @@ -117,7 +117,7 @@ private: std::vector _stack; std::vector _textures; - std::vector _materials; + std::vector > _materials; int _vflags,_tcsets,_tcsize; std::vector _vertices; From 824dfc314b80dc0e91505cb08a65a50e4e8d2ded Mon Sep 17 00:00:00 2001 From: Turo Lamminen Date: Tue, 12 Dec 2017 19:39:41 +0200 Subject: [PATCH 07/17] B3DImporter: Store node animations in unique_ptr --- code/B3DImporter.cpp | 13 ++++++++----- code/B3DImporter.h | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/code/B3DImporter.cpp b/code/B3DImporter.cpp index 195ee04a8..dd7b0d95e 100644 --- a/code/B3DImporter.cpp +++ b/code/B3DImporter.cpp @@ -546,7 +546,7 @@ aiNode *B3DImporter::ReadNODE( aiNode *parent ){ node->mParent=parent; node->mTransformation=tform; - aiNodeAnim *nodeAnim=0; + std::unique_ptr nodeAnim; vector meshes; vector children; @@ -564,11 +564,10 @@ aiNode *B3DImporter::ReadNODE( aiNode *parent ){ ReadANIM(); }else if( t=="KEYS" ){ if( !nodeAnim ){ - nodeAnim=new aiNodeAnim; - _nodeAnims.push_back( nodeAnim ); + nodeAnim.reset(new aiNodeAnim); nodeAnim->mNodeName=node->mName; } - ReadKEYS( nodeAnim ); + ReadKEYS( nodeAnim.get() ); }else if( t=="NODE" ){ aiNode *child=ReadNODE( node ); children.push_back( child ); @@ -576,6 +575,10 @@ aiNode *B3DImporter::ReadNODE( aiNode *parent ){ ExitChunk(); } + if (nodeAnim) { + _nodeAnims.emplace_back( std::move(nodeAnim) ); + } + node->mNumMeshes= static_cast(meshes.size()); node->mMeshes=to_array( meshes ); @@ -716,7 +719,7 @@ void B3DImporter::ReadBB3D( aiScene *scene ){ aiAnimation *anim = _animations.back().get(); anim->mNumChannels=static_cast(_nodeAnims.size()); - anim->mChannels=to_array( _nodeAnims ); + anim->mChannels = unique_to_array( _nodeAnims ); scene->mNumAnimations=static_cast(_animations.size()); scene->mAnimations=unique_to_array( _animations ); diff --git a/code/B3DImporter.h b/code/B3DImporter.h index f9645f594..342b88a28 100644 --- a/code/B3DImporter.h +++ b/code/B3DImporter.h @@ -124,7 +124,7 @@ private: std::vector _nodes; std::vector > _meshes; - std::vector _nodeAnims; + std::vector > _nodeAnims; std::vector > _animations; }; From 89afe0780b99e7309cf6158ce3e23e1e76f242f3 Mon Sep 17 00:00:00 2001 From: Turo Lamminen Date: Tue, 12 Dec 2017 20:03:16 +0200 Subject: [PATCH 08/17] B3DImporter: Fix double free when reusing Importer --- code/B3DImporter.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/code/B3DImporter.cpp b/code/B3DImporter.cpp index dd7b0d95e..aa87609d4 100644 --- a/code/B3DImporter.cpp +++ b/code/B3DImporter.cpp @@ -702,6 +702,7 @@ void B3DImporter::ReadBB3D( aiScene *scene ){ //nodes scene->mRootNode=_nodes[0]; + _nodes.clear(); // node ownership now belongs to scene //material if( !_materials.size() ){ From 89ff8fc05d5a5f4517222b92a9642e4ab63b528b Mon Sep 17 00:00:00 2001 From: Alexandre Avenel Date: Tue, 12 Dec 2017 20:34:53 +0100 Subject: [PATCH 09/17] Add unit test for issue 1623 --- test/unit/utPLYImportExport.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/unit/utPLYImportExport.cpp b/test/unit/utPLYImportExport.cpp index 82cc54bdb..dbb7f4292 100644 --- a/test/unit/utPLYImportExport.cpp +++ b/test/unit/utPLYImportExport.cpp @@ -85,6 +85,18 @@ TEST_F(utPLYImportExport, exportTest_Success ) { #endif // ASSIMP_BUILD_NO_EXPORT +//Test issue 1623, crash when loading two PLY files in a row +TEST_F(utPLYImportExport, importerMultipleTest) { + Assimp::Importer importer; + const aiScene *scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/PLY/cube.ply", 0); + + EXPECT_NE(nullptr, scene); + + scene = importer.ReadFile(ASSIMP_TEST_MODELS_DIR "/PLY/cube.ply", 0); + + EXPECT_NE(nullptr, scene); +} + TEST_F( utPLYImportExport, vertexColorTest ) { Assimp::Importer importer; const aiScene *scene = importer.ReadFile( ASSIMP_TEST_MODELS_DIR "/PLY/float-color.ply", 0 ); From 50bcaf39fd60da3bc9cb5a2dffb7f2f26d1731e9 Mon Sep 17 00:00:00 2001 From: Alexandre Avenel Date: Tue, 12 Dec 2017 20:48:51 +0100 Subject: [PATCH 10/17] Fix issue #1623 : crash when loading multiple PLY files Pointer mGeneratedMesh was not reset to nullptr when transfering ownership to pScene->mMeshes --- code/PlyLoader.cpp | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/code/PlyLoader.cpp b/code/PlyLoader.cpp index c6e862bf1..7c4614474 100644 --- a/code/PlyLoader.cpp +++ b/code/PlyLoader.cpp @@ -91,9 +91,9 @@ namespace // ------------------------------------------------------------------------------------------------ // Constructor to be privately used by Importer PLYImporter::PLYImporter() - : mBuffer() - , pcDOM() - , mGeneratedMesh(NULL){ + : mBuffer(nullptr) + , pcDOM(nullptr) + , mGeneratedMesh(nullptr){ // empty } @@ -196,7 +196,10 @@ void PLYImporter::InternReadFile(const std::string& pFile, if (!PLY::DOM::ParseInstance(streamedBuffer, &sPlyDom, this)) { if (mGeneratedMesh != NULL) + { delete(mGeneratedMesh); + mGeneratedMesh = nullptr; + } streamedBuffer.close(); throw DeadlyImportError("Invalid .ply file: Unable to build DOM (#1)"); @@ -211,7 +214,10 @@ void PLYImporter::InternReadFile(const std::string& pFile, if (!PLY::DOM::ParseInstanceBinary(streamedBuffer, &sPlyDom, this, bIsBE)) { if (mGeneratedMesh != NULL) + { delete(mGeneratedMesh); + mGeneratedMesh = nullptr; + } streamedBuffer.close(); throw DeadlyImportError("Invalid .ply file: Unable to build DOM (#2)"); @@ -220,7 +226,10 @@ void PLYImporter::InternReadFile(const std::string& pFile, else { if (mGeneratedMesh != NULL) + { delete(mGeneratedMesh); + mGeneratedMesh = nullptr; + } streamedBuffer.close(); throw DeadlyImportError("Invalid .ply file: Unknown file format"); @@ -230,7 +239,10 @@ void PLYImporter::InternReadFile(const std::string& pFile, { AI_DEBUG_INVALIDATE_PTR(this->mBuffer); if (mGeneratedMesh != NULL) + { delete(mGeneratedMesh); + mGeneratedMesh = nullptr; + } streamedBuffer.close(); throw DeadlyImportError("Invalid .ply file: Missing format specification"); @@ -252,7 +264,10 @@ void PLYImporter::InternReadFile(const std::string& pFile, if (mGeneratedMesh->mNumVertices < 3) { if (mGeneratedMesh != NULL) + { delete(mGeneratedMesh); + mGeneratedMesh = nullptr; + } streamedBuffer.close(); throw DeadlyImportError("Invalid .ply file: Not enough " @@ -289,6 +304,7 @@ void PLYImporter::InternReadFile(const std::string& pFile, pScene->mNumMeshes = 1; pScene->mMeshes = new aiMesh*[pScene->mNumMeshes]; pScene->mMeshes[0] = mGeneratedMesh; + mGeneratedMesh = nullptr; // generate a simple node structure pScene->mRootNode = new aiNode(); From 379562055b8061480e44a56354bb778c8e5449a7 Mon Sep 17 00:00:00 2001 From: Tommy Date: Fri, 15 Dec 2017 23:18:45 +0100 Subject: [PATCH 11/17] Fix incorrect NO_GLTF_IMPORTER define name in glTFExporter.h --- code/glTFExporter.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/glTFExporter.h b/code/glTFExporter.h index c813fff44..752072604 100644 --- a/code/glTFExporter.h +++ b/code/glTFExporter.h @@ -45,7 +45,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef AI_GLTFEXPORTER_H_INC #define AI_GLTFEXPORTER_H_INC -#ifndef ASSIMP_BUILD_NO_GLTF_IMPORTER +#ifndef ASSIMP_BUILD_NO_GLTF_EXPORTER #include #include @@ -113,6 +113,6 @@ namespace Assimp } -#endif // ASSIMP_BUILD_NO_GLTF_IMPORTER +#endif // ASSIMP_BUILD_NO_GLTF_EXPORTER #endif // AI_GLTFEXPORTER_H_INC From 068d4aa4cbcd88f6f4313374a0e562424e534467 Mon Sep 17 00:00:00 2001 From: Turo Lamminen Date: Wed, 13 Dec 2017 10:55:32 +0200 Subject: [PATCH 12/17] Disable clang static analysis for now Travis updated to clang 5.0 and there are new issues. --- .travis.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9265dfb38..0b8d2f328 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,9 +33,10 @@ env: matrix: include: - - os: linux - compiler: clang - env: ANALYZE=ON + # disabled until clang 5.0 analyzer issues are fixed + # - os: linux + # compiler: clang + # env: ANALYZE=ON - os: linux compiler: clang env: ASAN=ON From 276fc5f46609b9a81b0a4ad0a3a6020f1708b746 Mon Sep 17 00:00:00 2001 From: Turo Lamminen Date: Wed, 13 Dec 2017 11:27:05 +0200 Subject: [PATCH 13/17] Remove packed attribute from aiUVTransform It would cause a warning when removing packed from aiVector2 --- include/assimp/material.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/assimp/material.h b/include/assimp/material.h index a12e7d076..502b89746 100644 --- a/include/assimp/material.h +++ b/include/assimp/material.h @@ -491,7 +491,7 @@ struct aiUVTransform } #endif -} PACK_STRUCT; +}; #include "./Compiler/poppack1.h" From 45ad63f37353fc2e84bccfb9daf32fff6fb3cbf8 Mon Sep 17 00:00:00 2001 From: Turo Lamminen Date: Wed, 13 Dec 2017 11:27:44 +0200 Subject: [PATCH 14/17] Remove packed attribute from aiVector2 Returning a reference to a member of packed member is UB --- include/assimp/vector2.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/assimp/vector2.h b/include/assimp/vector2.h index 564d1f8b5..3b85fc22b 100644 --- a/include/assimp/vector2.h +++ b/include/assimp/vector2.h @@ -99,7 +99,7 @@ public: operator aiVector2t () const; TReal x, y; -} PACK_STRUCT; +}; typedef aiVector2t aiVector2D; From 87462165b5243a96ddf4e4d1725e16e4aac3af5c Mon Sep 17 00:00:00 2001 From: Turo Lamminen Date: Wed, 13 Dec 2017 11:28:22 +0200 Subject: [PATCH 15/17] Fix bad pointer arithmetic in aiVector2 Trying to reference 'y' via pointer arithmetic on 'x' is UB --- include/assimp/vector2.inl | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/include/assimp/vector2.inl b/include/assimp/vector2.inl index 5ce13eece..fe3059ad5 100644 --- a/include/assimp/vector2.inl +++ b/include/assimp/vector2.inl @@ -114,13 +114,29 @@ const aiVector2t& aiVector2t::operator /= (TReal f) { // ------------------------------------------------------------------------------------------------ template TReal aiVector2t::operator[](unsigned int i) const { - return *(&x + i); + switch (i) { + case 0: + return x; + case 1: + return y; + default: + break; + } + return x; } // ------------------------------------------------------------------------------------------------ template TReal& aiVector2t::operator[](unsigned int i) { - return *(&x + i); + switch (i) { + case 0: + return x; + case 1: + return y; + default: + break; + } + return x; } // ------------------------------------------------------------------------------------------------ From 2f082340fc668cd8fef56232d64fa824ce2b325d Mon Sep 17 00:00:00 2001 From: Turo Lamminen Date: Sat, 16 Dec 2017 14:57:59 +0200 Subject: [PATCH 16/17] MDLLoader: Add workaround for clang 5.0 build issue --- code/MDLLoader.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/MDLLoader.cpp b/code/MDLLoader.cpp index 2025d79b3..dc7b379ce 100644 --- a/code/MDLLoader.cpp +++ b/code/MDLLoader.cpp @@ -415,8 +415,14 @@ void MDLImporter::InternReadFile_Quake1( ) else { // get the first frame in the group +#if 1 + // FIXME: the cast is wrong and causea a warning on clang 5.0 + // disable thi code for now, fix it later + ai_assert(false && "Bad pointer cast"); +#else BE_NCONST MDL::GroupFrame* pcFrames2 = (BE_NCONST MDL::GroupFrame*)pcFrames; pcFirstFrame = (BE_NCONST MDL::SimpleFrame*)(&pcFrames2->time + pcFrames->type); +#endif } BE_NCONST MDL::Vertex* pcVertices = (BE_NCONST MDL::Vertex*) ((pcFirstFrame->name) + sizeof(pcFirstFrame->name)); VALIDATE_FILE_SIZE((const unsigned char*)(pcVertices + pcHeader->num_verts)); From 463dec5c7ed89088614c9f84acc61a9d5f987368 Mon Sep 17 00:00:00 2001 From: Turo Lamminen Date: Sat, 16 Dec 2017 15:19:53 +0200 Subject: [PATCH 17/17] Change StreamReader::IncPtr argument to signed Negative values are passed to it so it needs to be signed --- code/StreamReader.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/StreamReader.h b/code/StreamReader.h index 6220de9a8..b70ee7eca 100644 --- a/code/StreamReader.h +++ b/code/StreamReader.h @@ -192,7 +192,7 @@ public: // --------------------------------------------------------------------- /** Increase the file pointer (relative seeking) */ - void IncPtr(size_t plus) { + void IncPtr(intptr_t plus) { current += plus; if (current > limit) { throw DeadlyImportError("End of file or read limit was reached");