diff --git a/src/OVAL/oval_directives.c b/src/OVAL/oval_directives.c index 99e63cfce6..55f110be9d 100644 --- a/src/OVAL/oval_directives.c +++ b/src/OVAL/oval_directives.c @@ -123,7 +123,10 @@ int oval_directives_model_import_source(struct oval_directives_model *model, str /* make sure this is a right schema and tag */ tagname = (char *)xmlTextReaderLocalName(context.reader); namespace = (char *)xmlTextReaderNamespaceUri(context.reader); - int is_ovaldir = strcmp((const char *)OVAL_DIRECTIVES_NAMESPACE, namespace) == 0; + int is_ovaldir = 0; + if (namespace != NULL) { + is_ovaldir = strcmp((const char *)OVAL_DIRECTIVES_NAMESPACE, namespace) == 0; + } /* start parsing */ if (is_ovaldir && (strcmp(tagname, OVAL_ROOT_ELM_DIRECTIVES) == 0)) { ret = oval_directives_model_parse(context.reader, &context); @@ -300,7 +303,10 @@ static int oval_directives_model_parse(xmlTextReaderPtr reader, struct oval_pars char *tagname = (char *)xmlTextReaderLocalName(reader); char *namespace = (char *)xmlTextReaderNamespaceUri(reader); - int is_ovaldir = strcmp((const char*)OVAL_DIRECTIVES_NAMESPACE, namespace) == 0; + int is_ovaldir = 0; + if (namespace != NULL) { + is_ovaldir = strcmp((const char*)OVAL_DIRECTIVES_NAMESPACE, namespace) == 0; + } if (is_ovaldir && (strcmp(tagname, "generator") == 0)) { struct oval_generator *gen; gen = oval_directives_model_get_generator(context->directives_model); diff --git a/src/OVAL/oval_parser.c b/src/OVAL/oval_parser.c index 0003752ced..51546ebc4a 100644 --- a/src/OVAL/oval_parser.c +++ b/src/OVAL/oval_parser.c @@ -154,7 +154,10 @@ int oval_definition_model_parse(xmlTextReaderPtr reader, struct oval_parser_cont char *tagname = (char *)xmlTextReaderLocalName(reader); char *namespace = (char *)xmlTextReaderNamespaceUri(reader); - int is_oval = strcmp((const char *)OVAL_DEFINITIONS_NAMESPACE, namespace) == 0; + int is_oval = 0; + if (namespace != NULL) { + is_oval = strcmp((const char *)OVAL_DEFINITIONS_NAMESPACE, namespace) == 0; + } if (is_oval && (strcmp(tagname, tagname_definitions) == 0)) { ret = oval_parser_parse_tag(reader, context, &oval_definition_parse_tag, NULL); } else if (is_oval && strcmp(tagname, tagname_tests) == 0) { diff --git a/src/OVAL/oval_sysInfo.c b/src/OVAL/oval_sysInfo.c index 1ed31cccde..d31ea104d7 100644 --- a/src/OVAL/oval_sysInfo.c +++ b/src/OVAL/oval_sysInfo.c @@ -251,7 +251,10 @@ static int _oval_sysinfo_parse_tag(xmlTextReaderPtr reader, struct oval_parser_c char *namespace = (char *)xmlTextReaderNamespaceUri(reader); int return_code = 0; - int is_ovalsys = strcmp((const char *)OVAL_SYSCHAR_NAMESPACE, namespace) == 0; + int is_ovalsys = 0; + if (namespace != NULL) { + is_ovalsys = strcmp((const char *)OVAL_SYSCHAR_NAMESPACE, namespace) == 0; + } if (is_ovalsys && (strcmp(tagname, "os_name") == 0)) { return_code = oscap_parser_text_value(reader, &_oval_sysinfo_parse_tag_consume_os_name, sysinfo); } else if (is_ovalsys && (strcmp(tagname, "os_version") == 0)) { @@ -282,7 +285,10 @@ int oval_sysinfo_parse_tag(xmlTextReaderPtr reader, struct oval_parser_context * char *namespace = (char *)xmlTextReaderNamespaceUri(reader); int return_code=0; - int is_ovalsys = strcmp((const char *)OVAL_SYSCHAR_NAMESPACE, namespace) == 0; + int is_ovalsys = 0; + if (namespace != NULL) { + is_ovalsys = strcmp((const char *)OVAL_SYSCHAR_NAMESPACE, namespace) == 0; + } if (is_ovalsys) { return_code = oval_parser_parse_tag(reader, context, &_oval_sysinfo_parse_tag, sysinfo); } else { diff --git a/src/OVAL/oval_sysInterface.c b/src/OVAL/oval_sysInterface.c index 4500da77b9..b9472b2f28 100644 --- a/src/OVAL/oval_sysInterface.c +++ b/src/OVAL/oval_sysInterface.c @@ -181,7 +181,10 @@ static int _oval_sysint_parse_tag(xmlTextReaderPtr reader, struct oval_parser_co char *namespace = (char *)xmlTextReaderNamespaceUri(reader); int return_code = 0; - int is_ovalsys = strcmp((const char *)OVAL_SYSCHAR_NAMESPACE, namespace) == 0; + int is_ovalsys = 0; + if (namespace != NULL) { + is_ovalsys = strcmp((const char *)OVAL_SYSCHAR_NAMESPACE, namespace) == 0; + } if (is_ovalsys && (strcmp(tagname, "interface_name") == 0)) { return_code = oscap_parser_text_value(reader, &oval_consume_interface_name, sysint); } else if (is_ovalsys && (strcmp(tagname, "ip_address") == 0)) { @@ -209,7 +212,10 @@ int oval_sysint_parse_tag(xmlTextReaderPtr reader, char *namespace = (char *)xmlTextReaderNamespaceUri(reader); int return_code = 0; - int is_ovalsys = strcmp((const char *)OVAL_SYSCHAR_NAMESPACE, namespace) == 0; + int is_ovalsys = 0; + if (namespace != NULL) { + is_ovalsys = strcmp((const char *)OVAL_SYSCHAR_NAMESPACE, namespace) == 0; + } if (is_ovalsys && (strcmp(tagname, "interface") == 0)) { return_code = oval_parser_parse_tag(reader, context, &_oval_sysint_parse_tag, sysint); } else { diff --git a/src/OVAL/oval_sysItem.c b/src/OVAL/oval_sysItem.c index 85b7d08c38..8f693753f1 100644 --- a/src/OVAL/oval_sysItem.c +++ b/src/OVAL/oval_sysItem.c @@ -205,7 +205,7 @@ static int _oval_sysitem_parse_subtag(xmlTextReaderPtr reader, struct oval_parse char *tagname = (char *)xmlTextReaderLocalName(reader); char *namespace = (char *)xmlTextReaderNamespaceUri(reader); int return_code = 0; - if (strcmp((const char *)OVAL_SYSCHAR_NAMESPACE, namespace) == 0) { + if (oscap_strcmp((const char *)OVAL_SYSCHAR_NAMESPACE, namespace) == 0) { /* This is a message */ return_code = oval_message_parse_tag(reader, context, (oscap_consumer_func) _oval_sysitem_parse_subtag_message_consumer, sysitem); } else { diff --git a/src/OVAL/oval_sysModel.c b/src/OVAL/oval_sysModel.c index 5dd610000a..e5a1bb525d 100644 --- a/src/OVAL/oval_sysModel.c +++ b/src/OVAL/oval_sysModel.c @@ -248,7 +248,11 @@ int oval_syschar_model_import_source(struct oval_syschar_model *model, struct os /* make sure this is syschar */ char *tagname = (char *)xmlTextReaderLocalName(context.reader); char *namespace = (char *)xmlTextReaderNamespaceUri(context.reader); - int is_ovalsys = strcmp((const char *)OVAL_SYSCHAR_NAMESPACE, namespace) == 0; + + int is_ovalsys = 0; + if (namespace != NULL) { + is_ovalsys = strcmp((const char *)OVAL_SYSCHAR_NAMESPACE, namespace) == 0; + } /* start parsing */ if (is_ovalsys && (strcmp(tagname, OVAL_ROOT_ELM_SYSCHARS) == 0)) { ret = oval_syschar_model_parse(context.reader, &context); diff --git a/src/OVAL/oval_sys_parser.c b/src/OVAL/oval_sys_parser.c index 70b0c9758f..0287858fbf 100644 --- a/src/OVAL/oval_sys_parser.c +++ b/src/OVAL/oval_sys_parser.c @@ -57,7 +57,10 @@ int oval_syschar_model_parse(xmlTextReaderPtr reader, struct oval_parser_context char *tagname = (char *)xmlTextReaderLocalName(reader); char *namespace = (char *)xmlTextReaderNamespaceUri(reader); - int is_ovalsys = strcmp((const char*)OVAL_SYSCHAR_NAMESPACE, namespace) == 0; + int is_ovalsys = 0; + if (namespace != NULL) { + is_ovalsys = strcmp((const char*)OVAL_SYSCHAR_NAMESPACE, namespace) == 0; + } if (is_ovalsys && (strcmp(tagname, "generator") == 0)) { struct oval_generator *gen; gen = oval_syschar_model_get_generator(context->syschar_model); diff --git a/src/OVAL/oval_syschar.c b/src/OVAL/oval_syschar.c index e5c5632db9..d9c728b86b 100644 --- a/src/OVAL/oval_syschar.c +++ b/src/OVAL/oval_syschar.c @@ -292,7 +292,10 @@ int oval_syschar_parse_tag(xmlTextReaderPtr reader, struct oval_parser_context * char *namespace = (char *)xmlTextReaderNamespaceUri(reader); int return_code = 0; - int is_ovalsys = strcmp((const char *)OVAL_SYSCHAR_NAMESPACE, namespace) == 0; + int is_ovalsys = 0; + if (namespace != NULL) { + is_ovalsys = strcmp((const char *)OVAL_SYSCHAR_NAMESPACE, namespace) == 0; + } if (is_ovalsys && (strcmp(tagname, "object") == 0)) { char *object_id = (char *)xmlTextReaderGetAttribute(reader, BAD_CAST "id"); struct oval_object *object = oval_definition_model_get_new_object(context->definition_model, object_id); diff --git a/src/OVAL/oval_variable.c b/src/OVAL/oval_variable.c index b729b840d1..7338c9f177 100644 --- a/src/OVAL/oval_variable.c +++ b/src/OVAL/oval_variable.c @@ -1082,7 +1082,7 @@ static int _oval_variable_parse_constant_tag(xmlTextReaderPtr reader, struct ova xmlChar *namespace = xmlTextReaderNamespaceUri(reader); struct oval_variable *variable = (struct oval_variable *)user; - if (strcmp("value", (char *) tagname) || strcmp(DEFINITION_NAMESPACE, (char *) namespace)) { + if (oscap_strcmp("value", (char *) tagname) || oscap_strcmp(DEFINITION_NAMESPACE, (char *) namespace)) { dW("Invalid element <%s:%s> in constant variable %s on line %d.", namespace, tagname, variable->id, xmlTextReaderGetParserLineNumber(reader)); goto out; diff --git a/src/OVAL/results/oval_resModel.c b/src/OVAL/results/oval_resModel.c index cdd24c9414..e8bcf22841 100644 --- a/src/OVAL/results/oval_resModel.c +++ b/src/OVAL/results/oval_resModel.c @@ -213,7 +213,11 @@ int oval_results_model_import_source(struct oval_results_model *model, struct os /* make sure these are results */ tagname = (char *)xmlTextReaderLocalName(context.reader); namespace = (char *)xmlTextReaderNamespaceUri(context.reader); - int is_ovalres = strcmp((const char *)OVAL_RESULTS_NAMESPACE, namespace) == 0; + + int is_ovalres = 0; + if (namespace != NULL) { + is_ovalres = strcmp((const char *)OVAL_RESULTS_NAMESPACE, namespace) == 0; + } /* star parsing */ if (is_ovalres && (strcmp(tagname, OVAL_ROOT_ELM_RESULTS) == 0)) { ret = oval_results_model_parse(context.reader, &context); @@ -333,8 +337,12 @@ int oval_results_model_parse(xmlTextReaderPtr reader, struct oval_parser_context char *tagname = (char *)xmlTextReaderLocalName(reader); char *namespace = (char *)xmlTextReaderNamespaceUri(reader); - int is_ovalres = strcmp((const char *)OVAL_RESULTS_NAMESPACE, namespace) == 0; - int is_ovaldef = (is_ovalres) ? false : (strcmp((const char *)OVAL_DEFINITIONS_NAMESPACE, namespace) == 0); + int is_ovalres = 0; + int is_ovaldef = 0; + if (namespace != NULL) { + is_ovalres = strcmp((const char *)OVAL_RESULTS_NAMESPACE, namespace) == 0; + is_ovaldef = (is_ovalres) ? false : (strcmp((const char *)OVAL_DEFINITIONS_NAMESPACE, namespace) == 0); + } if (is_ovalres && (strcmp(tagname, "generator") == 0)) { struct oval_generator *gen; gen = oval_results_model_get_generator(context->results_model); diff --git a/src/OVAL/results/oval_resultSystem.c b/src/OVAL/results/oval_resultSystem.c index e957ed4512..0c29f0b898 100644 --- a/src/OVAL/results/oval_resultSystem.c +++ b/src/OVAL/results/oval_resultSystem.c @@ -317,7 +317,10 @@ int oval_result_system_parse_tag(xmlTextReaderPtr reader, struct oval_parser_con char *namespace = (char *)xmlTextReaderNamespaceUri(reader); int return_code = 0; - int is_ovalres = strcmp((const char *)OVAL_RESULTS_NAMESPACE, namespace) == 0; + int is_ovalres = 0; + if (namespace != NULL) { + is_ovalres = strcmp((const char *)OVAL_RESULTS_NAMESPACE, namespace) == 0; + } if (is_ovalres && (strcmp(tagname, "system") == 0)) { /* create new empty syschar for this model */ struct oval_syschar_model *syschar_model = oval_syschar_model_new(context->definition_model); diff --git a/tests/oval_details/openscap_2288_regression.sh b/tests/oval_details/openscap_2288_regression.sh new file mode 100755 index 0000000000..77f07f5ba5 --- /dev/null +++ b/tests/oval_details/openscap_2288_regression.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +set -e -o pipefail + +. $builddir/tests/test_common.sh + +$OSCAP info "${top_srcdir}/tests/oval_details/openscap_2288_regression.xml" diff --git a/tests/oval_details/openscap_2288_regression.xml b/tests/oval_details/openscap_2288_regression.xml new file mode 100644 index 0000000000..227cc38727 --- /dev/null +++ b/tests/oval_details/openscap_2288_regression.xml @@ -0,0 +1,5 @@ + + + + +