From 8464da75857c1556f64984c0b014300638e38d4f Mon Sep 17 00:00:00 2001 From: =?utf8?q?D=C3=A1niel=20Juh=C3=A1sz?= Date: Sat, 22 Apr 2017 00:55:07 +0200 Subject: [PATCH] Fix a memory leak (#5636) --- src/mesh.cpp | 26 ++++++++++++++------------ src/mesh.h | 1 + 2 files changed, 15 insertions(+), 12 deletions(-) diff --git a/src/mesh.cpp b/src/mesh.cpp index 0a5b7fb6c..824d6891b 100644 --- a/src/mesh.cpp +++ b/src/mesh.cpp @@ -387,37 +387,39 @@ void recalculateBoundingBox(scene::IMesh *src_mesh) scene::IMeshBuffer* cloneMeshBuffer(scene::IMeshBuffer *mesh_buffer) { - scene::IMeshBuffer *clone = NULL; switch (mesh_buffer->getVertexType()) { case video::EVT_STANDARD: { video::S3DVertex *v = (video::S3DVertex *) mesh_buffer->getVertices(); u16 *indices = mesh_buffer->getIndices(); - scene::SMeshBuffer *temp_buf = new scene::SMeshBuffer(); - temp_buf->append(v, mesh_buffer->getVertexCount(), indices, + scene::SMeshBuffer *cloned_buffer = new scene::SMeshBuffer(); + cloned_buffer->append(v, mesh_buffer->getVertexCount(), indices, mesh_buffer->getIndexCount()); - return temp_buf; - break; + return cloned_buffer; } case video::EVT_2TCOORDS: { video::S3DVertex2TCoords *v = (video::S3DVertex2TCoords *) mesh_buffer->getVertices(); u16 *indices = mesh_buffer->getIndices(); - scene::SMeshBufferTangents *temp_buf = new scene::SMeshBufferTangents(); - temp_buf->append(v, mesh_buffer->getVertexCount(), indices, + scene::SMeshBufferTangents *cloned_buffer = + new scene::SMeshBufferTangents(); + cloned_buffer->append(v, mesh_buffer->getVertexCount(), indices, mesh_buffer->getIndexCount()); - break; + return cloned_buffer; } case video::EVT_TANGENTS: { video::S3DVertexTangents *v = (video::S3DVertexTangents *) mesh_buffer->getVertices(); u16 *indices = mesh_buffer->getIndices(); - scene::SMeshBufferTangents *temp_buf = new scene::SMeshBufferTangents(); - temp_buf->append(v, mesh_buffer->getVertexCount(), indices, + scene::SMeshBufferTangents *cloned_buffer = + new scene::SMeshBufferTangents(); + cloned_buffer->append(v, mesh_buffer->getVertexCount(), indices, mesh_buffer->getIndexCount()); - break; + return cloned_buffer; } } - return clone; + // This should not happen. + sanity_check(false); + return NULL; } scene::SMesh* cloneMesh(scene::IMesh *src_mesh) diff --git a/src/mesh.h b/src/mesh.h index 0e946caab..adaf0c836 100644 --- a/src/mesh.h +++ b/src/mesh.h @@ -85,6 +85,7 @@ void rotateMeshYZby (scene::IMesh *mesh, f64 degrees); /* * Clone the mesh buffer. + * The returned pointer should be dropped. */ scene::IMeshBuffer* cloneMeshBuffer(scene::IMeshBuffer *mesh_buffer); -- 2.25.1