64 lines
2.6 KiB
Diff
64 lines
2.6 KiB
Diff
From 3b4245db2e954675d15f50a0e9d004e62a43a48c Mon Sep 17 00:00:00 2001
|
||
From: Tomas Popela <tpopela@redhat.com>
|
||
Date: Mon, 23 Jul 2018 09:50:53 +0200
|
||
Subject: [PATCH 02/17] Check whether document has a root element before
|
||
accessing it.
|
||
|
||
yelp-3.28.1/libyelp/yelp-docbook-document.c:562:13: note: Access to field 'ns' results in a dereference of a null pointer (loaded from field 'xmlcur')
|
||
if (priv->xmlcur->ns) {
|
||
^ ~~~~~~
|
||
560| * unique value, and insert it into the in-memory tree */
|
||
561| g_snprintf (autoidstr, 20, "//autoid-%d", ++autoid);
|
||
562|-> if (priv->xmlcur->ns) {
|
||
563| xmlNewNsProp (priv->xmlcur,
|
||
564| xmlNewNs (priv->xmlcur, XML_XML_NAMESPACE, BAD_CAST "xml"),
|
||
|
||
yelp-3.28.1/libyelp/yelp-docbook-document.c:608:16: note: Access to field 'children' results in a dereference of a null pointer (loaded from field 'xmlcur')
|
||
for (cur = priv->xmlcur->children; cur; cur = cur->next) {
|
||
^ ~~~~~~
|
||
606| NULL);
|
||
607|
|
||
608|-> for (cur = priv->xmlcur->children; cur; cur = cur->next) {
|
||
609| if (cur->type == XML_ELEMENT_NODE) {
|
||
610| priv->xmlcur = cur;
|
||
---
|
||
libyelp/yelp-docbook-document.c | 8 ++++++--
|
||
1 file changed, 6 insertions(+), 2 deletions(-)
|
||
|
||
diff --git a/libyelp/yelp-docbook-document.c b/libyelp/yelp-docbook-document.c
|
||
index 6ecaf316..24746248 100644
|
||
--- a/libyelp/yelp-docbook-document.c
|
||
+++ b/libyelp/yelp-docbook-document.c
|
||
@@ -309,6 +309,7 @@ docbook_process (YelpDocbookDocument *docbook)
|
||
GFile *file = NULL;
|
||
gchar *filepath = NULL;
|
||
xmlDocPtr xmldoc = NULL;
|
||
+ xmlNodePtr xmlcur = NULL;
|
||
xmlChar *id = NULL;
|
||
xmlParserCtxtPtr parserCtxt = NULL;
|
||
GError *error;
|
||
@@ -343,7 +344,10 @@ docbook_process (YelpDocbookDocument *docbook)
|
||
XML_PARSE_DTDLOAD | XML_PARSE_NOCDATA |
|
||
XML_PARSE_NOENT | XML_PARSE_NONET );
|
||
|
||
- if (xmldoc == NULL) {
|
||
+ if (xmldoc)
|
||
+ xmlcur = xmlDocGetRootElement (xmldoc);
|
||
+
|
||
+ if (xmldoc == NULL || xmlcur == NULL) {
|
||
error = g_error_new (YELP_ERROR, YELP_ERROR_PROCESSING,
|
||
_("The file ‘%s’ could not be parsed because it is"
|
||
" not a well-formed XML document."),
|
||
@@ -374,7 +378,7 @@ docbook_process (YelpDocbookDocument *docbook)
|
||
priv->max_depth = 1;
|
||
|
||
priv->xmldoc = xmldoc;
|
||
- priv->xmlcur = xmlDocGetRootElement (xmldoc);
|
||
+ priv->xmlcur = xmlcur;
|
||
|
||
id = xmlGetProp (priv->xmlcur, BAD_CAST "id");
|
||
if (!id)
|
||
--
|
||
2.19.1
|
||
|