From 69087abc56237d4fdf6557a47602583b7fe733ac Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sat, 21 Sep 2019 16:36:22 +0200 Subject: [PATCH 1/4] Ensure that the aiString lenght is 4 bytes independent which platform and add mingw back to appveyor. --- appveyor.yml | 4 ++++ code/Material/MaterialSystem.cpp | 18 +----------------- code/glTF/glTFImporter.cpp | 2 +- code/glTF2/glTF2Importer.cpp | 2 +- include/assimp/types.h | 7 ++++++- 5 files changed, 13 insertions(+), 20 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 3729ea028..849b05a1d 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -16,6 +16,7 @@ matrix: image: - Visual Studio 2015 - Visual Studio 2017 + - MinGW platform: - Win32 @@ -26,10 +27,13 @@ configuration: Release install: - set PATH=C:\Ruby24-x64\bin;%PATH% - set CMAKE_DEFINES -DASSIMP_WERROR=ON + - if [%COMPILER%]==[MinGW] set PATH=C:\MinGW\bin;%PATH% - if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2015" set CMAKE_GENERATOR_NAME=Visual Studio 14 2015 - if "%APPVEYOR_BUILD_WORKER_IMAGE%"=="Visual Studio 2017" set CMAKE_GENERATOR_NAME=Visual Studio 15 2017 - if "%platform%"=="x64" set CMAKE_GENERATOR_NAME=%CMAKE_GENERATOR_NAME% Win64 - cmake %CMAKE_DEFINES% -G "%CMAKE_GENERATOR_NAME%" . + # Rename sh.exe as sh.exe in PATH interferes with MinGW + - rename "C:\Program Files\Git\usr\bin\sh.exe" "sh2.exe" - set PATH=%PATH%;"C:\\Program Files (x86)\\Inno Setup 5" - ps: Invoke-WebRequest -Uri https://download.microsoft.com/download/5/7/b/57b2947c-7221-4f33-b35e-2fc78cb10df4/vc_redist.x64.exe -OutFile .\packaging\windows-innosetup\vc_redist.x64.exe - ps: Invoke-WebRequest -Uri https://download.microsoft.com/download/1/d/8/1d8137db-b5bb-4925-8c5d-927424a2e4de/vc_redist.x86.exe -OutFile .\packaging\windows-innosetup\vc_redist.x86.exe diff --git a/code/Material/MaterialSystem.cpp b/code/Material/MaterialSystem.cpp index d0b39093b..ecdf9942c 100644 --- a/code/Material/MaterialSystem.cpp +++ b/code/Material/MaterialSystem.cpp @@ -545,23 +545,7 @@ aiReturn aiMaterial::AddProperty (const aiString* pInput, unsigned int type, unsigned int index) { - // We don't want to add the whole buffer .. write a 32 bit length - // prefix followed by the zero-terminated UTF8 string. - // (HACK) I don't want to break the ABI now, but we definitely - // ought to change aiString::mLength to uint32_t one day. - if (sizeof(size_t) == 8) { - aiString copy = *pInput; - uint32_t* s = reinterpret_cast(©.length); - s[1] = static_cast(pInput->length); - - return AddBinaryProperty(s+1, - static_cast(pInput->length+1+4), - pKey, - type, - index, - aiPTI_String); - } - ai_assert(sizeof(size_t)==4); + ai_assert(sizeof(ai_uint32)==4); return AddBinaryProperty(pInput, static_cast(pInput->length+1+4), pKey, diff --git a/code/glTF/glTFImporter.cpp b/code/glTF/glTFImporter.cpp index e470050b9..9ecd742f6 100644 --- a/code/glTF/glTFImporter.cpp +++ b/code/glTF/glTFImporter.cpp @@ -266,7 +266,7 @@ void glTFImporter::ImportMeshes(glTF::Asset& r) aim->mName = mesh.id; if (mesh.primitives.size() > 1) { - size_t& len = aim->mName.length; + ai_uint32& len = aim->mName.length; aim->mName.data[len] = '-'; len += 1 + ASSIMP_itoa10(aim->mName.data + len + 1, unsigned(MAXLEN - len - 1), p); } diff --git a/code/glTF2/glTF2Importer.cpp b/code/glTF2/glTF2Importer.cpp index d1871ce0e..9197f3b94 100644 --- a/code/glTF2/glTF2Importer.cpp +++ b/code/glTF2/glTF2Importer.cpp @@ -385,7 +385,7 @@ void glTF2Importer::ImportMeshes(glTF2::Asset& r) aim->mName = mesh.name.empty() ? mesh.id : mesh.name; if (mesh.primitives.size() > 1) { - size_t& len = aim->mName.length; + ai_uint32& len = aim->mName.length; aim->mName.data[len] = '-'; len += 1 + ASSIMP_itoa10(aim->mName.data + len + 1, unsigned(MAXLEN - len - 1), p); } diff --git a/include/assimp/types.h b/include/assimp/types.h index 331b8cd03..e0a004c92 100644 --- a/include/assimp/types.h +++ b/include/assimp/types.h @@ -53,6 +53,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #include #include +#include // Our compile configuration #include "defs.h" @@ -65,11 +66,15 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "matrix4x4.h" #include "quaternion.h" +typedef int32_t ai_int32; +typedef uint32_t ai_uint32 ; + #ifdef __cplusplus #include #include // for std::nothrow_t #include // for aiString::Set(const std::string&) + namespace Assimp { //! @cond never namespace Intern { @@ -379,7 +384,7 @@ struct aiString /** Binary length of the string excluding the terminal 0. This is NOT the * logical length of strings containing UTF-8 multi-byte sequences! It's * the number of bytes from the beginning of the string to its end.*/ - size_t length; + ai_uint32 length; /** String buffer. Size limit is MAXLEN */ char data[MAXLEN]; From ef54a00fc47e9f0e5c9471e0aea984d1bdfd87b2 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sun, 22 Sep 2019 09:12:37 +0200 Subject: [PATCH 2/4] Use correct escape sequence for unsigned. --- code/PostProcessing/ValidateDataStructure.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/PostProcessing/ValidateDataStructure.cpp b/code/PostProcessing/ValidateDataStructure.cpp index 712fd6943..501f7a9b2 100644 --- a/code/PostProcessing/ValidateDataStructure.cpp +++ b/code/PostProcessing/ValidateDataStructure.cpp @@ -958,7 +958,7 @@ void ValidateDSProcess::Validate( const aiString* pString) { if (pString->length > MAXLEN) { - ReportError("aiString::length is too large (%lu, maximum is %lu)", + ReportError("aiString::length is too large (%u, maximum is %lu)", pString->length,MAXLEN); } const char* sz = pString->data; From 94c488d7ea48511a8f65b3ef4f27b476a064b285 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sun, 22 Sep 2019 10:15:44 +0200 Subject: [PATCH 3/4] fix compiler warnings. --- code/MD2/MD2Loader.cpp | 2 +- code/MD5/MD5Parser.cpp | 2 +- include/assimp/types.h | 12 ++++++------ 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/code/MD2/MD2Loader.cpp b/code/MD2/MD2Loader.cpp index a26f70533..7023c0fa3 100644 --- a/code/MD2/MD2Loader.cpp +++ b/code/MD2/MD2Loader.cpp @@ -344,7 +344,7 @@ void MD2Importer::InternReadFile( const std::string& pFile, if (pcSkins->name[0]) { aiString szString; - const size_t iLen = ::strlen(pcSkins->name); + const ai_uint32 iLen = (ai_uint32) ::strlen(pcSkins->name); ::memcpy(szString.data,pcSkins->name,iLen); szString.data[iLen] = '\0'; szString.length = iLen; diff --git a/code/MD5/MD5Parser.cpp b/code/MD5/MD5Parser.cpp index b955e9cbc..37490212f 100644 --- a/code/MD5/MD5Parser.cpp +++ b/code/MD5/MD5Parser.cpp @@ -235,7 +235,7 @@ bool MD5Parser::ParseSection(Section& out) const char* szStart = ++sz; \ while('\"'!=*sz)++sz; \ const char* szEnd = (sz++); \ - out.length = (size_t)(szEnd - szStart); \ + out.length = (ai_uint32) (szEnd - szStart); \ ::memcpy(out.data,szStart,out.length); \ out.data[out.length] = '\0'; // ------------------------------------------------------------------------------------------------ diff --git a/include/assimp/types.h b/include/assimp/types.h index e0a004c92..f0805940f 100644 --- a/include/assimp/types.h +++ b/include/assimp/types.h @@ -274,8 +274,8 @@ struct aiString } /** Copy constructor */ - aiString(const aiString& rOther) : - length(rOther.length) + aiString(const aiString& rOther) + : length(rOther.length) { // Crop the string to the maximum length length = length>=MAXLEN?MAXLEN-1:length; @@ -285,7 +285,7 @@ struct aiString /** Constructor from std::string */ explicit aiString(const std::string& pString) : - length(pString.length()) + length( (ai_uint32) pString.length()) { length = length>=MAXLEN?MAXLEN-1:length; memcpy( data, pString.c_str(), length); @@ -297,14 +297,14 @@ struct aiString if( pString.length() > MAXLEN - 1) { return; } - length = pString.length(); + length = (ai_uint32)pString.length(); memcpy( data, pString.c_str(), length); data[length] = 0; } /** Copy a const char* to the aiString */ void Set( const char* sz) { - const size_t len = ::strlen(sz); + const ai_int32 len = (ai_uint32) ::strlen(sz); if( len > MAXLEN - 1) { return; } @@ -351,7 +351,7 @@ struct aiString /** Append a string to the string */ void Append (const char* app) { - const size_t len = ::strlen(app); + const ai_uint32 len = (ai_uint32) ::strlen(app); if (!len) { return; } From ab3c17419e920127f82b287ba8d13ee459fecf7b Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Sun, 22 Sep 2019 12:27:44 +0200 Subject: [PATCH 4/4] fix warning --- include/assimp/types.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/assimp/types.h b/include/assimp/types.h index f0805940f..8ad5680f3 100644 --- a/include/assimp/types.h +++ b/include/assimp/types.h @@ -305,7 +305,7 @@ struct aiString /** Copy a const char* to the aiString */ void Set( const char* sz) { const ai_int32 len = (ai_uint32) ::strlen(sz); - if( len > MAXLEN - 1) { + if( len > (ai_int32)MAXLEN - 1) { return; } length = len;