Fix some crashes during theme (re)loading

Change-Id: I01405fbe86a48ae79f2cbe633b89f2dcfb1ef266
Signed-off-by: Vojtech Bocek <vbocek@gmail.com>
This commit is contained in:
Vojtech Bocek
2015-01-12 20:23:37 +01:00
committed by Dees Troy
parent 85cfb7d7b7
commit e979abd6cc
3 changed files with 29 additions and 15 deletions
+25 -11
View File
@@ -557,11 +557,16 @@ PageSet::~PageSet()
{
for (std::vector<Page*>::iterator itr = mPages.begin(); itr != mPages.end(); ++itr)
delete *itr;
for (std::vector<xml_node<>*>::iterator itr2 = templates.begin(); itr2 != templates.end(); ++itr2)
delete *itr2;
delete mResources;
free(mXmlFile);
mDoc.clear();
for (std::vector<xml_document<>*>::iterator itr = mIncludedDocs.begin(); itr != mIncludedDocs.end(); ++itr) {
(*itr)->clear();
delete *itr;
}
}
int PageSet::Load(ZipArchive* package)
@@ -605,7 +610,7 @@ int PageSet::Load(ZipArchive* package)
return -1;
}
}
return CheckInclude(package, &mDoc);
}
@@ -620,7 +625,7 @@ int PageSet::CheckInclude(ZipArchive* package, xml_document<> *parentDoc)
long len;
char* xmlFile = NULL;
string filename;
xml_document<> doc;
xml_document<> *doc = NULL;
par = parentDoc->first_node("recovery");
if (!par) {
@@ -682,11 +687,14 @@ int PageSet::CheckInclude(ZipArchive* package, xml_document<> *parentDoc)
return -1;
}
}
doc.parse<0>(xmlFile);
parent = doc.first_node("recovery");
xmlFile[len] = '\0';
doc = new xml_document<>();
doc->parse<0>(xmlFile);
parent = doc->first_node("recovery");
if (!parent)
parent = doc.first_node("install");
parent = doc->first_node("install");
// Now, let's parse the XML
LOGINFO("Loading included resources...\n");
@@ -711,11 +719,17 @@ int PageSet::CheckInclude(ZipArchive* package, xml_document<> *parentDoc)
templates.push_back(xmltemplate);
child = parent->first_node("pages");
if (child)
if (LoadPages(child))
return -1;
if (child && LoadPages(child))
{
templates.pop_back();
doc->clear();
delete doc;
return -1;
}
if (CheckInclude(package, &doc))
mIncludedDocs.push_back(doc);
if (CheckInclude(package, doc))
return -1;
chld = chld->next_sibling("xmlfile");