[librest] xml: Don't crash parsing empty XML string



commit a217a9fea1a1cfb2bee3263b0ea08b860535af8d
Author: Christophe Fergeau <cfergeau redhat com>
Date:   Mon Oct 16 10:48:33 2017 +0200

    xml: Don't crash parsing empty XML string
    
    Calling rest_xml_parser_parse_from_data() with an empty string ("")
    currently causes a crash as xmlReaderForMemory() returns NULL in that
    case, and we then try to dereference this pointer without checking it's
    non-NULL.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=789053

 rest/rest-xml-parser.c |    3 +++
 tests/xml.c            |    6 ++++++
 2 files changed, 9 insertions(+), 0 deletions(-)
---
diff --git a/rest/rest-xml-parser.c b/rest/rest-xml-parser.c
index ffa6ff3..796052e 100644
--- a/rest/rest-xml-parser.c
+++ b/rest/rest-xml-parser.c
@@ -103,6 +103,9 @@ rest_xml_parser_parse_from_data (RestXmlParser *parser,
                                NULL, /* URL? */
                                NULL, /* encoding */
                                XML_PARSE_RECOVER | XML_PARSE_NOCDATA);
+  if (reader == NULL) {
+      return NULL;
+  }
   xmlTextReaderSetErrorHandler(reader, rest_xml_parser_xml_reader_error, NULL);
 
   while (xmlTextReaderRead (reader) == 1)
diff --git a/tests/xml.c b/tests/xml.c
index 4b7718b..9d03e29 100644
--- a/tests/xml.c
+++ b/tests/xml.c
@@ -34,6 +34,12 @@ main (int argc, char **argv)
 
   parser = rest_xml_parser_new ();
 
+  root = rest_xml_parser_parse_from_data (parser, "", -1);
+  g_assert (root == NULL);
+
+  root = rest_xml_parser_parse_from_data (parser, "<invalid", -1);
+  g_assert (root == NULL);
+
   root = rest_xml_parser_parse_from_data (parser, TEST_XML, strlen (TEST_XML));
   g_assert (root);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]