From dd3ac96d868e5a3e7c230832b25aacd24e03719e Mon Sep 17 00:00:00 2001
From: Andrei Karas <akaras@inbox.ru>
Date: Thu, 21 Jul 2011 04:01:46 +0300
Subject: Fix possible crash. Move unsafe initialisations from static members.

---
 src/client.cpp              | 11 ++++++++---
 src/resources/beinginfo.cpp |  2 +-
 src/resources/spritedef.cpp |  3 +--
 3 files changed, 10 insertions(+), 6 deletions(-)

(limited to 'src')

diff --git a/src/client.cpp b/src/client.cpp
index 5a06267f2..6611d3dcf 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -659,9 +659,6 @@ Client::~Client()
 
     ActorSprite::unload();
 
-    delete SpriteReference::Empty;
-    SpriteReference::Empty = 0;
-
     ResourceManager::deleteInstance();
 
     logger->log1("Quitting8");
@@ -1029,6 +1026,14 @@ int Client::exec()
                     // Read default paths file 'data/paths.xml'
                     paths.init("paths.xml", true);
                     paths.setDefaultValues(getPathsDefaults());
+                    if (!SpriteReference::Empty)
+                    {
+                        SpriteReference::Empty = new SpriteReference(
+                            paths.getStringValue("spriteErrorFile"), 0);
+                    }
+
+                    if (!BeingInfo::unknown)
+                        BeingInfo::unknown = new BeingInfo;
 
                     Mana::Event event(EVENT_STATECHANGE);
                     event.setInt("newState", STATE_LOAD_DATA);
diff --git a/src/resources/beinginfo.cpp b/src/resources/beinginfo.cpp
index d6865449e..6b4f57d81 100644
--- a/src/resources/beinginfo.cpp
+++ b/src/resources/beinginfo.cpp
@@ -29,7 +29,7 @@
 
 #include "debug.h"
 
-BeingInfo *BeingInfo::unknown = new BeingInfo;
+BeingInfo *BeingInfo::unknown = 0;
 Attack *BeingInfo::empty = new Attack(SpriteAction::ATTACK, "", "");
 
 BeingInfo::BeingInfo():
diff --git a/src/resources/spritedef.cpp b/src/resources/spritedef.cpp
index 79e665f4c..b6addba77 100644
--- a/src/resources/spritedef.cpp
+++ b/src/resources/spritedef.cpp
@@ -39,8 +39,7 @@
 
 #include "debug.h"
 
-SpriteReference *SpriteReference::Empty = new SpriteReference(
-                paths.getStringValue("spriteErrorFile"), 0);
+SpriteReference *SpriteReference::Empty = 0;
 
 Action *SpriteDef::getAction(std::string action) const
 {
-- 
cgit v1.2.3-70-g09d2