diff --git a/nmap_error.cc b/nmap_error.cc index 8322941db..44023e0a5 100644 --- a/nmap_error.cc +++ b/nmap_error.cc @@ -122,6 +122,8 @@ void fatal(const char *fmt, ...) { } log_write(o.log_errors? LOG_NORMAL|LOG_STDERR : LOG_STDERR, "\nQUITTING!\n"); + if (xml_tag_open()) + xml_close_start_tag(); if (!xml_root_written()) xml_start_tag("nmaprun"); /* Close all open XML elements but one. */ @@ -198,6 +200,8 @@ void pfatal(const char *fmt, ...) { log_write(o.log_errors? LOG_NORMAL|LOG_STDERR : LOG_STDERR, "%s: %s (%d)\n", errbuf, strerror_s, error_number); + if (xml_tag_open()) + xml_close_start_tag(); if (!xml_root_written()) xml_start_tag("nmaprun"); /* Close all open XML elements but one. */ diff --git a/xml.cc b/xml.cc index 2cb95698f..afcf2e567 100644 --- a/xml.cc +++ b/xml.cc @@ -412,6 +412,11 @@ int xml_depth() { return xml.element_stack.size(); } +/* Return true iff a root element has been started. */ +bool xml_tag_open() { + return xml.tag_open; +} + /* Return true iff a root element has been started. */ bool xml_root_written() { return xml.root_written; diff --git a/xml.h b/xml.h index 543bd1d87..ab6edcbfe 100644 --- a/xml.h +++ b/xml.h @@ -118,6 +118,7 @@ int xml_attribute(const char *name, const char *fmt, ...) __attribute__ ((format int xml_newline(); int xml_depth(); +bool xml_tag_open(); bool xml_root_written(); #endif