PFW: Prevent crash if subsystem structure missing

BZ: 62524

If the XML file defining a subsystem is missing, the PFW crashes
without any message.
This patch fixes this issue.

Change-Id: Ibc0e9d195a8207d41d25613f56d1c9740bf6c784
Signed-off-by: Frédéric Boisnard <fredericx.boisnard@intel.com>
Reviewed-on: http://android.intel.com:8080/70698
Reviewed-by: Denneulin, Guillaume <guillaume.denneulin@intel.com>
Reviewed-by: Rocard, KevinX <kevinx.rocard@intel.com>
Reviewed-by: Centelles, Sylvain <sylvain.centelles@intel.com>
Reviewed-by: Baron, Georges-henriX <georges-henrix.baron@intel.com>
Tested-by: Dixon, CharlesX <charlesx.dixon@intel.com>
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
diff --git a/xmlserializer/XmlFileDocSource.cpp b/xmlserializer/XmlFileDocSource.cpp
index c8a0837..f1094f1 100644
--- a/xmlserializer/XmlFileDocSource.cpp
+++ b/xmlserializer/XmlFileDocSource.cpp
@@ -43,9 +43,7 @@
 bool CXmlFileDocSource::populate(CXmlSerializingContext& serializingContext)
 {
     // Check that the doc has been created
-    if (!_pDoc) {
-
-        serializingContext.setError("Could not parse file " + _strXmlInstanceFile);
+    if (!isParsable(serializingContext)) {
 
         return false;
     }
@@ -84,6 +82,19 @@
     return true;
 }
 
+bool CXmlFileDocSource::isParsable(CXmlSerializingContext& serializingContext) const
+{
+    // Check that the doc has been created
+    if (!_pDoc) {
+
+        serializingContext.setError("Could not parse file " + _strXmlInstanceFile);
+
+        return false;
+    }
+
+    return true;
+}
+
 bool CXmlFileDocSource::isInstanceDocumentValid()
 {
 #ifdef LIBXML_SCHEMAS_ENABLED
diff --git a/xmlserializer/XmlFileDocSource.h b/xmlserializer/XmlFileDocSource.h
index 3274b29..46c5230 100644
--- a/xmlserializer/XmlFileDocSource.h
+++ b/xmlserializer/XmlFileDocSource.h
@@ -40,6 +40,9 @@
     // CXmlDocSource method implemented
     virtual bool populate(CXmlSerializingContext& serializingContext);
 
+    // Check that the file exists and is readable
+    virtual bool isParsable(CXmlSerializingContext& serializingContext) const;
+
 private:
 
     // Validation of the document with the xsd file
diff --git a/xmlserializer/XmlStringDocSink.cpp b/xmlserializer/XmlStringDocSink.cpp
index a96a1ed..c38036d 100644
--- a/xmlserializer/XmlStringDocSink.cpp
+++ b/xmlserializer/XmlStringDocSink.cpp
@@ -41,6 +41,11 @@
     int iSize;
     xmlDocDumpFormatMemoryEnc(xmlDocSource.getDoc(), &pcDumpedDoc, &iSize, "UTF-8", 1);
 
+    if (!pcDumpedDoc) {
+
+        return false;
+    }
+
     _strResult.append((const char*)pcDumpedDoc);
 
     xmlFree(pcDumpedDoc);