153aa9179Sopenharmony_ciFrom e4f85f1bd2eb34d9b49da9154a4cc3a1bc284f68 Mon Sep 17 00:00:00 2001 253aa9179Sopenharmony_ciFrom: Nick Wellnhofer <wellnhofer@aevum.de> 353aa9179Sopenharmony_ciDate: Fri, 7 Apr 2023 11:46:35 +0200 453aa9179Sopenharmony_ciSubject: [PATCH] [CVE-2023-28484] Fix null deref in xmlSchemaFixupComplexType 553aa9179Sopenharmony_ci 653aa9179Sopenharmony_ciFix a null pointer dereference when parsing (invalid) XML schemas. 753aa9179Sopenharmony_ci 853aa9179Sopenharmony_ciThanks to Robby Simpson for the report! 953aa9179Sopenharmony_ci 1053aa9179Sopenharmony_ciFixes #491. 1153aa9179Sopenharmony_ci 1253aa9179Sopenharmony_ciReference:https://github.com/GNOME/libxml2/commit/e4f85f1bd2eb34d9b49da9154a4cc3a1bc284f68 1353aa9179Sopenharmony_ciConflict:NA 1453aa9179Sopenharmony_ci 1553aa9179Sopenharmony_ci--- 1653aa9179Sopenharmony_ci result/schemas/issue491_0_0.err | 1 + 1753aa9179Sopenharmony_ci test/schemas/issue491_0.xml | 1 + 1853aa9179Sopenharmony_ci test/schemas/issue491_0.xsd | 18 ++++++++++++++++++ 1953aa9179Sopenharmony_ci xmlschemas.c | 2 +- 2053aa9179Sopenharmony_ci 4 files changed, 21 insertions(+), 1 deletion(-) 2153aa9179Sopenharmony_ci create mode 100644 result/schemas/issue491_0_0.err 2253aa9179Sopenharmony_ci create mode 100644 test/schemas/issue491_0.xml 2353aa9179Sopenharmony_ci create mode 100644 test/schemas/issue491_0.xsd 2453aa9179Sopenharmony_ci 2553aa9179Sopenharmony_cidiff --git a/result/schemas/issue491_0_0.err b/result/schemas/issue491_0_0.err 2653aa9179Sopenharmony_cinew file mode 100644 2753aa9179Sopenharmony_ciindex 0000000..9b2bb96 2853aa9179Sopenharmony_ci--- /dev/null 2953aa9179Sopenharmony_ci+++ b/result/schemas/issue491_0_0.err 3053aa9179Sopenharmony_ci@@ -0,0 +1 @@ 3153aa9179Sopenharmony_ci+./test/schemas/issue491_0.xsd:8: element complexType: Schemas parser error : complex type 'ChildType': The content type of both, the type and its base type, must either 'mixed' or 'element-only'. 3253aa9179Sopenharmony_cidiff --git a/test/schemas/issue491_0.xml b/test/schemas/issue491_0.xml 3353aa9179Sopenharmony_cinew file mode 100644 3453aa9179Sopenharmony_ciindex 0000000..e2b2fc2 3553aa9179Sopenharmony_ci--- /dev/null 3653aa9179Sopenharmony_ci+++ b/test/schemas/issue491_0.xml 3753aa9179Sopenharmony_ci@@ -0,0 +1 @@ 3853aa9179Sopenharmony_ci+<Child xmlns="http://www.test.com">5</Child> 3953aa9179Sopenharmony_cidiff --git a/test/schemas/issue491_0.xsd b/test/schemas/issue491_0.xsd 4053aa9179Sopenharmony_cinew file mode 100644 4153aa9179Sopenharmony_ciindex 0000000..8170264 4253aa9179Sopenharmony_ci--- /dev/null 4353aa9179Sopenharmony_ci+++ b/test/schemas/issue491_0.xsd 4453aa9179Sopenharmony_ci@@ -0,0 +1,18 @@ 4553aa9179Sopenharmony_ci+<?xml version='1.0' encoding='UTF-8'?> 4653aa9179Sopenharmony_ci+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.test.com" targetNamespace="http://www.test.com" elementFormDefault="qualified" attributeFormDefault="unqualified"> 4753aa9179Sopenharmony_ci+ <xs:complexType name="BaseType"> 4853aa9179Sopenharmony_ci+ <xs:simpleContent> 4953aa9179Sopenharmony_ci+ <xs:extension base="xs:int" /> 5053aa9179Sopenharmony_ci+ </xs:simpleContent> 5153aa9179Sopenharmony_ci+ </xs:complexType> 5253aa9179Sopenharmony_ci+ <xs:complexType name="ChildType"> 5353aa9179Sopenharmony_ci+ <xs:complexContent> 5453aa9179Sopenharmony_ci+ <xs:extension base="BaseType"> 5553aa9179Sopenharmony_ci+ <xs:sequence> 5653aa9179Sopenharmony_ci+ <xs:element name="bad" type="xs:int" minOccurs="0" maxOccurs="1"/> 5753aa9179Sopenharmony_ci+ </xs:sequence> 5853aa9179Sopenharmony_ci+ </xs:extension> 5953aa9179Sopenharmony_ci+ </xs:complexContent> 6053aa9179Sopenharmony_ci+ </xs:complexType> 6153aa9179Sopenharmony_ci+ <xs:element name="Child" type="ChildType" /> 6253aa9179Sopenharmony_ci+</xs:schema> 6353aa9179Sopenharmony_cidiff --git a/xmlschemas.c b/xmlschemas.c 6453aa9179Sopenharmony_ciindex 4dbee37..7199d23 100644 6553aa9179Sopenharmony_ci--- a/xmlschemas.c 6653aa9179Sopenharmony_ci+++ b/xmlschemas.c 6753aa9179Sopenharmony_ci@@ -18640,7 +18640,7 @@ xmlSchemaFixupComplexType(xmlSchemaParserCtxtPtr pctxt, 6853aa9179Sopenharmony_ci "allowed to appear inside other model groups", 6953aa9179Sopenharmony_ci NULL, NULL); 7053aa9179Sopenharmony_ci 7153aa9179Sopenharmony_ci- } else if (! dummySequence) { 7253aa9179Sopenharmony_ci+ } else if ((!dummySequence) && (baseType->subtypes != NULL)) { 7353aa9179Sopenharmony_ci xmlSchemaTreeItemPtr effectiveContent = 7453aa9179Sopenharmony_ci (xmlSchemaTreeItemPtr) type->subtypes; 7553aa9179Sopenharmony_ci /* 7653aa9179Sopenharmony_ci-- 7753aa9179Sopenharmony_ci2.27.0 7853aa9179Sopenharmony_ci 79