From 2056e56bdbe5cf4316c7cc5d48008d1199a8142f Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 30 Sep 2017 10:45:14 +0200 Subject: [PATCH 1/3] Obj: prepare test to reproduce crash on linux. --- test/unit/utObjImportExport.cpp | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/test/unit/utObjImportExport.cpp b/test/unit/utObjImportExport.cpp index d4d4fbf9e..94bc71f67 100644 --- a/test/unit/utObjImportExport.cpp +++ b/test/unit/utObjImportExport.cpp @@ -254,3 +254,18 @@ TEST_F( utObjImportExport, issue809_vertex_color_Test ) { EXPECT_EQ( aiReturn_SUCCESS, exporter.Export( scene, "obj", ASSIMP_TEST_MODELS_DIR "/OBJ/test.obj" ) ); #endif // ASSIMP_BUILD_NO_EXPORT } + +TEST_F( utObjImportExport, issue1453_segfault ) { + static const std::string ObjModel = + "v 0.0 0.0 0.0" + "v 0.0 0.0 1.0" + "v 0.0 1.0 0.0" + "v 0.0 1.0 1.0" + "v 1.0 0.0 0.0" + "v 1.0 0.0 1.0" + "v 1.0 1.0 0.0" + "v 1.0 1.0 1.0"; + + Assimp::Importer myimporter; + const aiScene* myscene = myimporter.ReadFileFromMemory( ObjModel.c_str(), ObjModel.size(), 0 ); +} From f925e2cf4e37cf8923bc2348e2c665379675a90e Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 7 Oct 2017 19:08:20 +0200 Subject: [PATCH 2/3] Reproduce issue and remove assertion when a nullptr makes more sence --- code/ObjFileParser.cpp | 8 -------- code/ValidateDataStructure.cpp | 4 +--- test/unit/utObjImportExport.cpp | 21 ++++++++++++--------- 3 files changed, 13 insertions(+), 20 deletions(-) diff --git a/code/ObjFileParser.cpp b/code/ObjFileParser.cpp index 41677fce5..acf275b94 100644 --- a/code/ObjFileParser.cpp +++ b/code/ObjFileParser.cpp @@ -359,8 +359,6 @@ void ObjFileParser::getHomogeneousVector3( std::vector &point3d_arra m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); } -// ------------------------------------------------------------------- -// Get values for two 3D vectors on the same line void ObjFileParser::getTwoVectors3( std::vector &point3d_array_a, std::vector &point3d_array_b ) { ai_real x, y, z; copyNextWord(m_buffer, Buffersize); @@ -388,8 +386,6 @@ void ObjFileParser::getTwoVectors3( std::vector &point3d_array_a, st m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); } -// ------------------------------------------------------------------- -// Get values for a new 2D vector instance void ObjFileParser::getVector2( std::vector &point2d_array ) { ai_real x, y; copyNextWord(m_buffer, Buffersize); @@ -405,8 +401,6 @@ void ObjFileParser::getVector2( std::vector &point2d_array ) { static const std::string DefaultObjName = "defaultobject"; -// ------------------------------------------------------------------- -// Get values for a new face instance void ObjFileParser::getFace( aiPrimitiveType type ) { m_DataIt = getNextToken( m_DataIt, m_DataItEnd ); if ( m_DataIt == m_DataItEnd || *m_DataIt == '\0' ) { @@ -522,8 +516,6 @@ void ObjFileParser::getFace( aiPrimitiveType type ) { m_DataIt = skipLine( m_DataIt, m_DataItEnd, m_uiLine ); } -// ------------------------------------------------------------------- -// Get values for a new material description void ObjFileParser::getMaterialDesc() { // Get next data for material data m_DataIt = getNextToken(m_DataIt, m_DataItEnd); diff --git a/code/ValidateDataStructure.cpp b/code/ValidateDataStructure.cpp index ae1e0d342..f1035e441 100644 --- a/code/ValidateDataStructure.cpp +++ b/code/ValidateDataStructure.cpp @@ -89,9 +89,7 @@ AI_WONT_RETURN void ValidateDSProcess::ReportError(const char* msg,...) ai_assert(iLen > 0); va_end(args); -#ifdef ASSIMP_BUILD_DEBUG - ai_assert( false ); -#endif + throw DeadlyImportError("Validation failed: " + std::string(szBuffer,iLen)); } // ------------------------------------------------------------------------------------------------ diff --git a/test/unit/utObjImportExport.cpp b/test/unit/utObjImportExport.cpp index 94bc71f67..59fd58a6f 100644 --- a/test/unit/utObjImportExport.cpp +++ b/test/unit/utObjImportExport.cpp @@ -46,6 +46,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include +#include using namespace Assimp; @@ -257,15 +259,16 @@ TEST_F( utObjImportExport, issue809_vertex_color_Test ) { TEST_F( utObjImportExport, issue1453_segfault ) { static const std::string ObjModel = - "v 0.0 0.0 0.0" - "v 0.0 0.0 1.0" - "v 0.0 1.0 0.0" - "v 0.0 1.0 1.0" - "v 1.0 0.0 0.0" - "v 1.0 0.0 1.0" - "v 1.0 1.0 0.0" - "v 1.0 1.0 1.0"; + "v 0.0 0.0 0.0\n" + "v 0.0 0.0 1.0\n" + "v 0.0 1.0 0.0\n" + "v 0.0 1.0 1.0\n" + "v 1.0 0.0 0.0\n" + "v 1.0 0.0 1.0\n" + "v 1.0 1.0 0.0\n" + "v 1.0 1.0 1.0\nB"; Assimp::Importer myimporter; - const aiScene* myscene = myimporter.ReadFileFromMemory( ObjModel.c_str(), ObjModel.size(), 0 ); + const aiScene *scene = myimporter.ReadFileFromMemory( ObjModel.c_str(), ObjModel.size(), aiProcess_ValidateDataStructure ); + EXPECT_EQ( nullptr, scene ); } From 8f141c1966121f9b57756d8c40bc73d0f94c8501 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Tue, 10 Oct 2017 18:56:37 +0200 Subject: [PATCH 3/3] Update utObjImportExport.cpp Remove unused header. --- test/unit/utObjImportExport.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/test/unit/utObjImportExport.cpp b/test/unit/utObjImportExport.cpp index 2fc4d0a31..4aafa3dc2 100644 --- a/test/unit/utObjImportExport.cpp +++ b/test/unit/utObjImportExport.cpp @@ -47,7 +47,6 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include -#include using namespace Assimp;