diff options
author | jackpoz <giacomopoz@gmail.com> | 2013-12-31 15:39:47 +0100 |
---|---|---|
committer | jackpoz <giacomopoz@gmail.com> | 2013-12-31 15:39:47 +0100 |
commit | a7c77322eb1c195c6b4b0220406f10d5d2c7ed9c (patch) | |
tree | 856f4fd37a88eb2cfdb7dc93863b79c6d4f1cb11 | |
parent | bd57e06cafdb925ed6b07e3acad7e486f3286328 (diff) |
Tools/MeshExtractor: Fix uninitialized values causing crashes
Fix uninitialized values causing crashes in the destructor.
-rw-r--r-- | src/tools/mesh_extractor/ChunkedData.cpp | 3 | ||||
-rw-r--r-- | src/tools/mesh_extractor/Utils.h | 8 | ||||
-rw-r--r-- | src/tools/mesh_extractor/WorldModelGroup.cpp | 8 | ||||
-rw-r--r-- | src/tools/mesh_extractor/WorldModelRoot.cpp | 3 |
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() |