Просмотр исходного кода

Fix double free when the mesh contains duplicate bones.

David Marčinković 2 лет назад
Родитель
Сommit
945c77d699
1 измененных файлов с 7 добавлено и 1 удалено
  1. 7 1
      include/assimp/mesh.h

+ 7 - 1
include/assimp/mesh.h

@@ -59,6 +59,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 #include <assimp/types.h>
 
 #ifdef __cplusplus
+#include <unordered_set>
+
 extern "C" {
 #endif
 
@@ -872,11 +874,15 @@ struct aiMesh {
 
         // DO NOT REMOVE THIS ADDITIONAL CHECK
         if (mNumBones && mBones) {
+            std::unordered_set<const aiBone *> bones;
             for (unsigned int a = 0; a < mNumBones; a++) {
                 if (mBones[a]) {
-                    delete mBones[a];
+                    bones.insert(mBones[a]);
                 }
             }
+            for (const aiBone *bone: bones) {
+                delete bone;
+            }
             delete[] mBones;
         }