Fix some crashes during theme (re)loading
Change-Id: I01405fbe86a48ae79f2cbe633b89f2dcfb1ef266 Signed-off-by: Vojtech Bocek <vbocek@gmail.com>
This commit is contained in:
+25
-11
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user