diff --git a/code/Common/ScenePreprocessor.cpp b/code/Common/ScenePreprocessor.cpp index 2b73d9452..113ca7ff1 100644 --- a/code/Common/ScenePreprocessor.cpp +++ b/code/Common/ScenePreprocessor.cpp @@ -4,7 +4,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2020, assimp team - All rights reserved. Redistribution and use of this software in source and binary forms, @@ -52,8 +51,12 @@ void ScenePreprocessor::ProcessScene() { ai_assert(scene != nullptr); // Process all meshes - for (unsigned int i = 0; i < scene->mNumMeshes; ++i) + for (unsigned int i = 0; i < scene->mNumMeshes; ++i) { + if (nullptr == scene->mMeshes[i]) { + continue; + } ProcessMesh(scene->mMeshes[i]); + } // - nothing to do for nodes for the moment // - nothing to do for textures for the moment @@ -61,8 +64,12 @@ void ScenePreprocessor::ProcessScene() { // - nothing to do for cameras for the moment // Process all animations - for (unsigned int i = 0; i < scene->mNumAnimations; ++i) + for (unsigned int i = 0; i < scene->mNumAnimations; ++i) { + if (nullptr == scene->mAnimations[i]) { + continue; + } ProcessAnimation(scene->mAnimations[i]); + } // Generate a default material if none was specified if (!scene->mNumMaterials && scene->mNumMeshes) { diff --git a/contrib/zlib/CMakeLists.txt b/contrib/zlib/CMakeLists.txt index 0e8a4b1e1..469151ff6 100644 --- a/contrib/zlib/CMakeLists.txt +++ b/contrib/zlib/CMakeLists.txt @@ -198,11 +198,9 @@ endif(MINGW) add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_ASMS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) -IF(WIN32) - INSTALL( TARGETS zlibstatic - EXPORT "${TARGETS_EXPORT_NAME}" - LIBRARY DESTINATION ${ASSIMP_LIB_INSTALL_DIR} - ARCHIVE DESTINATION ${ASSIMP_LIB_INSTALL_DIR} - RUNTIME DESTINATION ${ASSIMP_BIN_INSTALL_DIR} - COMPONENT ${LIBASSIMP_COMPONENT}) -ENDIF() +INSTALL( TARGETS zlibstatic + EXPORT "${TARGETS_EXPORT_NAME}" + LIBRARY DESTINATION ${ASSIMP_LIB_INSTALL_DIR} + ARCHIVE DESTINATION ${ASSIMP_LIB_INSTALL_DIR} + RUNTIME DESTINATION ${ASSIMP_BIN_INSTALL_DIR} + COMPONENT ${LIBASSIMP_COMPONENT}) diff --git a/include/assimp/material.h b/include/assimp/material.h index 4daf0cdeb..13529f172 100644 --- a/include/assimp/material.h +++ b/include/assimp/material.h @@ -735,9 +735,9 @@ public: * #GetTextureCount() can be used to determine the number of textures * per texture type. * @param path Receives the path to the texture. - * If the texture is embedded, receives a '*' followed by the id of - * the texture (for the textures stored in the corresponding scene) which - * can be converted to an int using a function like atoi. + * Use aiScene::GetEmbeddedTexture() method to determine if returned path + * is an image file to be opened or a string key of embedded texture stored in the corresponding scene + * (could be a '*' followed by the id of the texture in case of no name) * NULL is a valid value. * @param mapping The texture mapping. * NULL is allowed as value. diff --git a/include/assimp/types.h b/include/assimp/types.h index 74763d496..99527dcc2 100644 --- a/include/assimp/types.h +++ b/include/assimp/types.h @@ -305,9 +305,9 @@ struct aiString { /** Copy a const char* to the aiString */ void Set(const char *sz) { - const ai_int32 len = (ai_uint32)::strlen(sz); + ai_int32 len = (ai_uint32)::strlen(sz); if (len > (ai_int32)MAXLEN - 1) { - return; + len = (ai_int32) MAXLEN - 1; } length = len; memcpy(data, sz, len); @@ -321,7 +321,10 @@ struct aiString { } length = rOther.length; - ; + if (length >(MAXLEN - 1)) { + length = (ai_int32) MAXLEN - 1; + } + memcpy(data, rOther.data, length); data[length] = '\0'; return *this; diff --git a/include/assimp/vector3.inl b/include/assimp/vector3.inl index 2765115a2..1d024e03f 100644 --- a/include/assimp/vector3.inl +++ b/include/assimp/vector3.inl @@ -5,8 +5,6 @@ Open Asset Import Library (assimp) Copyright (c) 2006-2020, assimp team - - All rights reserved. Redistribution and use of this software in source and binary forms, @@ -154,6 +152,9 @@ const aiVector3t& aiVector3t::operator *= (TReal f) { template AI_FORCE_INLINE const aiVector3t& aiVector3t::operator /= (TReal f) { + if ( f == static_cast(0.0)) { + return *this; + } const TReal invF = (TReal) 1.0 / f; x *= invF; y *= invF;