aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjackpoz <giacomopoz@gmail.com>2013-12-31 15:39:47 +0100
committerjackpoz <giacomopoz@gmail.com>2013-12-31 15:39:47 +0100
commita7c77322eb1c195c6b4b0220406f10d5d2c7ed9c (patch)
tree856f4fd37a88eb2cfdb7dc93863b79c6d4f1cb11 /src
parentbd57e06cafdb925ed6b07e3acad7e486f3286328 (diff)
Tools/MeshExtractor: Fix uninitialized values causing crashes
Fix uninitialized values causing crashes in the destructor.
Diffstat (limited to 'src')
-rw-r--r--src/tools/mesh_extractor/ChunkedData.cpp3
-rw-r--r--src/tools/mesh_extractor/Utils.h8
-rw-r--r--src/tools/mesh_extractor/WorldModelGroup.cpp8
-rw-r--r--src/tools/mesh_extractor/WorldModelRoot.cpp3
4 files changed, 10 insertions, 12 deletions
diff --git a/src/tools/mesh_extractor/ChunkedData.cpp b/src/tools/mesh_extractor/ChunkedData.cpp
index 00c528352aa..a3c3ec4b92c 100644
--- a/src/tools/mesh_extractor/ChunkedData.cpp
+++ b/src/tools/mesh_extractor/ChunkedData.cpp
@@ -85,6 +85,7 @@ ChunkedData::~ChunkedData()
delete *itr;
Chunks.clear();
+ /* WorldModelGroup Data and SubData share the same _Stream so it's deleted twice and it crahes
if (_Stream)
- delete _Stream;
+ delete _Stream;*/
}
diff --git a/src/tools/mesh_extractor/Utils.h b/src/tools/mesh_extractor/Utils.h
index 07a76282a45..0f2df672250 100644
--- a/src/tools/mesh_extractor/Utils.h
+++ b/src/tools/mesh_extractor/Utils.h
@@ -243,7 +243,7 @@ public:
class LiquidHeader
{
public:
- LiquidHeader() {}
+ LiquidHeader() : CountXVertices(0), CountYVertices(0), Width(0), Height(0), BaseLocation(0,0,0), MaterialId(0) {}
uint32 CountXVertices;
uint32 CountYVertices;
uint32 Width;
@@ -257,17 +257,17 @@ public:
class LiquidData
{
public:
- LiquidData() {}
+ LiquidData() : HeightMap(NULL), RenderFlags(NULL), CountXVertices(0), Width(0) {}
~LiquidData()
{
- /*for (uint32 i = 0; i < CountXVertices; ++i)
+ for (uint32 i = 0; i < CountXVertices; ++i)
delete[] HeightMap[i];
delete[] HeightMap;
for (uint32 i = 0; i < Width; ++i)
delete[] RenderFlags[i];
- delete[] RenderFlags;*/
+ delete[] RenderFlags;
}
float** HeightMap;
diff --git a/src/tools/mesh_extractor/WorldModelGroup.cpp b/src/tools/mesh_extractor/WorldModelGroup.cpp
index 283c51e24f6..454756f2baf 100644
--- a/src/tools/mesh_extractor/WorldModelGroup.cpp
+++ b/src/tools/mesh_extractor/WorldModelGroup.cpp
@@ -20,7 +20,7 @@
#include "Chunk.h"
#include "Utils.h"
-WorldModelGroup::WorldModelGroup(std::string path, int groupIndex) : GroupIndex(groupIndex), MOBA(NULL), IsBad(false), HasLiquidData(false)
+WorldModelGroup::WorldModelGroup(std::string path, int groupIndex) : SubData(NULL), GroupIndex(groupIndex), MOBA(NULL), MOBALength(0), IsBad(false), HasLiquidData(false)
{
Data = new ChunkedData(path);
if (!Data->_Stream)
@@ -31,7 +31,7 @@ WorldModelGroup::WorldModelGroup(std::string path, int groupIndex) : GroupIndex(
Load(path);
}
-WorldModelGroup::WorldModelGroup(Stream* stream, std::string path, int groupIndex) : GroupIndex(groupIndex), MOBA(NULL), IsBad(false), HasLiquidData(false)
+WorldModelGroup::WorldModelGroup(Stream* stream, std::string path, int groupIndex) : SubData(NULL), GroupIndex(groupIndex), MOBA(NULL), MOBALength(0), IsBad(false), HasLiquidData(false)
{
Data = new ChunkedData(stream, stream->GetSize());
Load(path);
@@ -39,12 +39,10 @@ WorldModelGroup::WorldModelGroup(Stream* stream, std::string path, int groupInde
WorldModelGroup::~WorldModelGroup()
{
- /*
- @ToDo: Uncomment this when emplace_back is properly used in void WorldModelRoot::ReadGroups() or replace with smart pointers
delete Data;
delete SubData;
delete[] MOBA;
- */
+
}
void WorldModelGroup::Load(std::string& path)
diff --git a/src/tools/mesh_extractor/WorldModelRoot.cpp b/src/tools/mesh_extractor/WorldModelRoot.cpp
index d80e5a1691a..cdeeec5ad26 100644
--- a/src/tools/mesh_extractor/WorldModelRoot.cpp
+++ b/src/tools/mesh_extractor/WorldModelRoot.cpp
@@ -33,11 +33,10 @@ WorldModelRoot::WorldModelRoot( std::string path )
WorldModelRoot::~WorldModelRoot()
{
delete Data;
- /* @ToDo: uncomment this once the ~WorldModelGroup() doesn't cause a crash anymore
for (std::vector<WorldModelGroup*>::iterator group = Groups.begin(); group != Groups.end(); ++group)
delete *group;
- Groups.clear();*/
+ Groups.clear();
}
void WorldModelRoot::ReadGroups()