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