From f673208a622eb0bac2b1e03cd189b6a7acd3569d Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Fri, 11 Mar 2016 16:25:56 +0100 Subject: [PATCH] fix segfault when parsed node has no namespace (#47) This bug was introduced in commit 8d06806d, the check for a correct namespace on head node of parsed XML fragments does not handle the case where the node has no namespace. Using lasso_equal_namespace() fix this. --- lasso/xml/xml.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/lasso/xml/xml.c b/lasso/xml/xml.c index f5314fb6..6475d6eb 100644 --- a/lasso/xml/xml.c +++ b/lasso/xml/xml.c @@ -1503,16 +1503,18 @@ lasso_node_impl_init_from_xml(LassoNode *node, xmlNode *xmlnode) } name_mismatch = name_mismatch || lasso_strisnotequal((char*)check_class->node_data->node_name, (char*)xmlnode->name); - name_mismatch = name_mismatch || lasso_strisnotequal((char*)check_class->node_data->ns->href, (char*)xmlnode->ns->href); - name_mismatch = name_mismatch && lasso_strisnotequal( - G_OBJECT_CLASS_NAME(class), - lasso_registry_default_get_mapping((char*)xmlnode->ns->href, - (char*)xmlnode->name, - LASSO_LASSO_HREF)); + name_mismatch = name_mismatch || ! lasso_equal_namespace(check_class->node_data->ns, xmlnode->ns); + if (xmlnode->ns) { + name_mismatch = name_mismatch && lasso_strisnotequal( + G_OBJECT_CLASS_NAME(class), + lasso_registry_default_get_mapping((char*)xmlnode->ns->href, + (char*)xmlnode->name, + LASSO_LASSO_HREF)); + } if (name_mismatch) { warning("lasso_node_impl_init_from_xml: expected name an href do not match node, expected %s:%s received %s:%s", - class->node_data->ns->href, class->node_data->node_name, - xmlnode->ns->href, xmlnode->name); + class->node_data->ns ? class->node_data->ns->href : NULL, class->node_data->node_name, + xmlnode->ns ? xmlnode->ns->href : NULL, xmlnode->name); rc = 1; goto cleanup; }