From c0b9c3125abab6081e0b54140900718c9b7a18d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Steffen=20Kie=C3=9F?= Date: Wed, 24 Jun 2020 17:03:55 +0200 Subject: Fix handling of empty strings when creating XML/HTML output. --- src/xml.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'src/xml.c') diff --git a/src/xml.c b/src/xml.c index 9306141..731bc01 100644 --- a/src/xml.c +++ b/src/xml.c @@ -18,6 +18,11 @@ static void escape_xml(cmark_strbuf *dest, const unsigned char *source, houdini_escape_html0(dest, source, length, 0); } +static void escape_xml_str(cmark_strbuf *dest, const unsigned char *source) { + if (source) + escape_xml(dest, source, strlen((char *)source)); +} + struct render_state { cmark_strbuf *xml; int indent; @@ -97,7 +102,7 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_CODE_BLOCK: if (node->as.code.info) { cmark_strbuf_puts(xml, " info=\""); - escape_xml(xml, node->as.code.info, strlen((char *)node->as.code.info)); + escape_xml_str(xml, node->as.code.info); cmark_strbuf_putc(xml, '"'); } cmark_strbuf_puts(xml, " xml:space=\"preserve\">"); @@ -109,23 +114,20 @@ static int S_render_node(cmark_node *node, cmark_event_type ev_type, case CMARK_NODE_CUSTOM_BLOCK: case CMARK_NODE_CUSTOM_INLINE: cmark_strbuf_puts(xml, " on_enter=\""); - escape_xml(xml, node->as.custom.on_enter, - strlen((char *)node->as.custom.on_enter)); + escape_xml_str(xml, node->as.custom.on_enter); cmark_strbuf_putc(xml, '"'); cmark_strbuf_puts(xml, " on_exit=\""); - escape_xml(xml, node->as.custom.on_exit, - strlen((char *)node->as.custom.on_exit)); + escape_xml_str(xml, node->as.custom.on_exit); cmark_strbuf_putc(xml, '"'); break; case CMARK_NODE_LINK: case CMARK_NODE_IMAGE: cmark_strbuf_puts(xml, " destination=\""); - escape_xml(xml, node->as.link.url, strlen((char *)node->as.link.url)); + escape_xml_str(xml, node->as.link.url); cmark_strbuf_putc(xml, '"'); if (node->as.link.title) { cmark_strbuf_puts(xml, " title=\""); - escape_xml(xml, node->as.link.title, - strlen((char *)node->as.link.title)); + escape_xml_str(xml, node->as.link.title); cmark_strbuf_putc(xml, '"'); } break; -- cgit v1.2.3