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