153aa9179Sopenharmony_ciFrom 0263b357567870c20de26c90dbc962aec81c5a19 Mon Sep 17 00:00:00 2001
253aa9179Sopenharmony_ciFrom: Nick Wellnhofer <wellnhofer@aevum.de>
353aa9179Sopenharmony_ciDate: Sun, 5 Mar 2023 14:08:35 +0100
453aa9179Sopenharmony_ciSubject: [PATCH] malloc-fail: Fix null deref in xmlGet{Min,Max}Occurs
553aa9179Sopenharmony_ci
653aa9179Sopenharmony_ciAlso report memory error in xmlSchemaGetNodeContent.
753aa9179Sopenharmony_ci
853aa9179Sopenharmony_ciFound with libFuzzer, see #344.
953aa9179Sopenharmony_ci
1053aa9179Sopenharmony_ciReference:https://github.com/GNOME/libxml2/commit/0263b357567870c20de26c90dbc962aec81c5a19
1153aa9179Sopenharmony_ciConflict:NA
1253aa9179Sopenharmony_ci---
1353aa9179Sopenharmony_ci xmlschemas.c | 6 ++++++
1453aa9179Sopenharmony_ci 1 file changed, 6 insertions(+)
1553aa9179Sopenharmony_ci
1653aa9179Sopenharmony_cidiff --git a/xmlschemas.c b/xmlschemas.c
1753aa9179Sopenharmony_ciindex 9be7999..c68103c 100644
1853aa9179Sopenharmony_ci--- a/xmlschemas.c
1953aa9179Sopenharmony_ci+++ b/xmlschemas.c
2053aa9179Sopenharmony_ci@@ -4760,6 +4760,8 @@ xmlSchemaGetNodeContent(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node)
2153aa9179Sopenharmony_ci 	val = xmlStrdup((xmlChar *)"");
2253aa9179Sopenharmony_ci     ret = xmlDictLookup(ctxt->dict, val, -1);
2353aa9179Sopenharmony_ci     xmlFree(val);
2453aa9179Sopenharmony_ci+    if (ret == NULL)
2553aa9179Sopenharmony_ci+        xmlSchemaPErrMemory(ctxt, "getting node content", node);
2653aa9179Sopenharmony_ci     return(ret);
2753aa9179Sopenharmony_ci }
2853aa9179Sopenharmony_ci 
2953aa9179Sopenharmony_ci@@ -6103,6 +6105,8 @@ xmlGetMaxOccurs(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node,
3053aa9179Sopenharmony_ci     if (attr == NULL)
3153aa9179Sopenharmony_ci 	return (def);
3253aa9179Sopenharmony_ci     val = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
3353aa9179Sopenharmony_ci+    if (val == NULL)
3453aa9179Sopenharmony_ci+        return (def);
3553aa9179Sopenharmony_ci 
3653aa9179Sopenharmony_ci     if (xmlStrEqual(val, (const xmlChar *) "unbounded")) {
3753aa9179Sopenharmony_ci 	if (max != UNBOUNDED) {
3853aa9179Sopenharmony_ci@@ -6177,6 +6181,8 @@ xmlGetMinOccurs(xmlSchemaParserCtxtPtr ctxt, xmlNodePtr node,
3953aa9179Sopenharmony_ci     if (attr == NULL)
4053aa9179Sopenharmony_ci 	return (def);
4153aa9179Sopenharmony_ci     val = xmlSchemaGetNodeContent(ctxt, (xmlNodePtr) attr);
4253aa9179Sopenharmony_ci+    if (val == NULL)
4353aa9179Sopenharmony_ci+	return (def);
4453aa9179Sopenharmony_ci     cur = val;
4553aa9179Sopenharmony_ci     while (IS_BLANK_CH(*cur))
4653aa9179Sopenharmony_ci         cur++;
4753aa9179Sopenharmony_ci-- 
4853aa9179Sopenharmony_ci2.27.0
4953aa9179Sopenharmony_ci
50