From 5c9a08e37546acd5d662e38bf4bb88a2ee554a58 Mon Sep 17 00:00:00 2001 From: kimkulling Date: Mon, 4 May 2020 15:36:54 +0200 Subject: [PATCH 1/5] closes https://github.com/assimp/assimp/issues/3190 : fix leak. --- include/assimp/metadata.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/include/assimp/metadata.h b/include/assimp/metadata.h index cd7569ffe..3a50e3b58 100644 --- a/include/assimp/metadata.h +++ b/include/assimp/metadata.h @@ -313,8 +313,13 @@ struct aiMetadata { // Set metadata type mValues[index].mType = GetAiType(value); + // Copy the given value to the dynamic storage - mValues[index].mData = new T(value); + if (nullptr != mValues[index].mData) { + ::memcpy(mValues[index].mData, &value, sizeof(T)); + } else { + mValues[index].mData = new T(value); + } return true; } From 3b4a9812e56a1f364e393a9dfc9f909055c9bf7c Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Mon, 4 May 2020 20:40:08 +0200 Subject: [PATCH 2/5] add init list for metadatatype. --- include/assimp/metadata.h | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/include/assimp/metadata.h b/include/assimp/metadata.h index 3a50e3b58..d3e22b5ad 100644 --- a/include/assimp/metadata.h +++ b/include/assimp/metadata.h @@ -86,6 +86,12 @@ typedef enum aiMetadataType { struct aiMetadataEntry { aiMetadataType mType; void *mData; + + aiMetadataEntry() : + mType(AI_META_MAX), + mData( nullptr ) { + // empty + } }; #ifdef __cplusplus From 6afb72216cbeae04f120e37a79e229665624b5c5 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Mon, 4 May 2020 20:50:44 +0200 Subject: [PATCH 3/5] Compile constructor of aiMetadataType only for c++ --- include/assimp/metadata.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/include/assimp/metadata.h b/include/assimp/metadata.h index d3e22b5ad..684508a71 100644 --- a/include/assimp/metadata.h +++ b/include/assimp/metadata.h @@ -87,11 +87,13 @@ struct aiMetadataEntry { aiMetadataType mType; void *mData; +#ifdef __cplusplus aiMetadataEntry() : mType(AI_META_MAX), mData( nullptr ) { // empty } +#endif }; #ifdef __cplusplus From bf95d1da7cea3608b7db2979738bcd82ab128f74 Mon Sep 17 00:00:00 2001 From: Kim Kulling Date: Mon, 4 May 2020 21:48:46 +0200 Subject: [PATCH 4/5] fix conversion --- code/AssetLib/X3D/X3DImporter_Postprocess.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/AssetLib/X3D/X3DImporter_Postprocess.cpp b/code/AssetLib/X3D/X3DImporter_Postprocess.cpp index a8bc1a00c..993aff02c 100644 --- a/code/AssetLib/X3D/X3DImporter_Postprocess.cpp +++ b/code/AssetLib/X3D/X3DImporter_Postprocess.cpp @@ -787,8 +787,10 @@ void X3DImporter::Postprocess_CollectMetadata(const CX3DImporter_NodeElement& pN // Add an element according to its type. if((*it)->Type == CX3DImporter_NodeElement::ENET_MetaBoolean) { - if(((CX3DImporter_NodeElement_MetaBoolean*)cur_meta)->Value.size() > 0) - pSceneNode.mMetaData->Set(static_cast(meta_idx), cur_meta->Name, *(((CX3DImporter_NodeElement_MetaBoolean*)cur_meta)->Value.begin())); + if(((CX3DImporter_NodeElement_MetaBoolean*)cur_meta)->Value.size() > 0) { + const bool v = (bool) *( ( (CX3DImporter_NodeElement_MetaBoolean*) cur_meta )->Value.begin()); + pSceneNode.mMetaData->Set(static_cast(meta_idx), cur_meta->Name, v); + } } else if((*it)->Type == CX3DImporter_NodeElement::ENET_MetaDouble) { From d1ae6ac77a9380b3b915262d2f5682739c8e8ac1 Mon Sep 17 00:00:00 2001 From: RichardTea <31507749+RichardTea@users.noreply.github.com> Date: Tue, 5 May 2020 09:51:41 +0100 Subject: [PATCH 5/5] Fix typo in Swapped Id and Name --- code/AssetLib/Collada/ColladaExporter.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/AssetLib/Collada/ColladaExporter.cpp b/code/AssetLib/Collada/ColladaExporter.cpp index 5e4cdda2d..3f4f53a3d 100644 --- a/code/AssetLib/Collada/ColladaExporter.cpp +++ b/code/AssetLib/Collada/ColladaExporter.cpp @@ -1226,8 +1226,8 @@ void ColladaExporter::WriteFloatArray(const std::string &pIdString, FloatDataTyp // ------------------------------------------------------------------------------------------------ // Writes the scene library void ColladaExporter::WriteSceneLibrary() { - const std::string sceneName = GetNodeUniqueId(mScene->mRootNode); - const std::string sceneId = GetNodeName(mScene->mRootNode); + const std::string sceneId = GetNodeUniqueId(mScene->mRootNode); + const std::string sceneName = GetNodeName(mScene->mRootNode); mOutput << startstr << "" << endstr; PushTag();