From e2d4cda076b7d6c6a5b98f52c05eb1b55e3095ea Mon Sep 17 00:00:00 2001
From: Alberto Massari <amassari@apache.org>
Date: Fri, 14 Mar 2008 11:33:27 +0000
Subject: [PATCH] If the XPath parser returns 'false', it means the XPath is
 invalid... (XERCESC-1787)

git-svn-id: https://svn.apache.org/repos/asf/xerces/c/trunk@637064 13f79535-47bb-0310-9956-ffa450edef68
---
 .../schema/identity/XercesXPath.cpp           |  4 +++-
 .../regression/XERCESC-1787/schema.xsd        | 20 +++++++++++++++++++
 .../src/XSTSHarness/regression/Xerces.testSet | 11 ++++++++++
 3 files changed, 34 insertions(+), 1 deletion(-)
 create mode 100644 tests/src/XSTSHarness/regression/XERCESC-1787/schema.xsd

diff --git a/src/xercesc/validators/schema/identity/XercesXPath.cpp b/src/xercesc/validators/schema/identity/XercesXPath.cpp
index b7c301fab..ebd2002e9 100644
--- a/src/xercesc/validators/schema/identity/XercesXPath.cpp
+++ b/src/xercesc/validators/schema/identity/XercesXPath.cpp
@@ -390,7 +390,9 @@ void XercesXPath::parseExpression(XMLStringPool* const stringPool,
 
     ValueVectorOf<int>                tokens(16, fMemoryManager);
     XPathScannerForSchema             scanner(stringPool);
-    scanner.scanExpression(fExpression, 0, length, &tokens);
+    if(!scanner.scanExpression(fExpression, 0, length, &tokens))
+        ThrowXMLwithMemMgr(XPathException, XMLExcepts::XPath_TokenNotSupported, fMemoryManager);
+
     bool                              firstTokenOfLocationPath=true;
     unsigned int                      tokenCount = tokens.size();
     RefVectorOf<XercesStep>*          stepsVector = new (fMemoryManager) RefVectorOf<XercesStep>(16, true, fMemoryManager);
diff --git a/tests/src/XSTSHarness/regression/XERCESC-1787/schema.xsd b/tests/src/XSTSHarness/regression/XERCESC-1787/schema.xsd
new file mode 100644
index 000000000..7a7bf8f65
--- /dev/null
+++ b/tests/src/XSTSHarness/regression/XERCESC-1787/schema.xsd
@@ -0,0 +1,20 @@
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
+
+<xs:element name="Songs">
+  <xs:complexType>
+    <xs:sequence>
+      <xs:element name="Song" maxOccurs="unbounded">
+        <xs:complexType>
+          <xs:attribute name="title" use="required"/>
+        </xs:complexType>
+      </xs:element>
+   </xs:sequence>
+  </xs:complexType>
+
+  <xs:unique name="Song">
+    <xs:selector xpath="*:Song"/>
+    <xs:field xpath="@title"/>
+  </xs:unique>
+</xs:element>
+
+</xs:schema>
\ No newline at end of file
diff --git a/tests/src/XSTSHarness/regression/Xerces.testSet b/tests/src/XSTSHarness/regression/Xerces.testSet
index 3555e4295..106e5fafd 100644
--- a/tests/src/XSTSHarness/regression/Xerces.testSet
+++ b/tests/src/XSTSHarness/regression/Xerces.testSet
@@ -419,4 +419,15 @@
 			<current status="accepted" date="2008-02-13"/>
 		</schemaTest>
 	</testGroup>
+	<testGroup name="XERCESC-1787">
+		<annotation>
+			<documentation>Wildcard namespace prefixes in XPath are not reported as errors</documentation>
+		</annotation>
+		<documentationReference xlink:href="https://issues.apache.org/jira/browse/XERCESC-1787"/>
+		<schemaTest name="XERCESC-1787">
+			<schemaDocument xlink:href="./XERCESC-1787/schema.xsd"/>
+			<expected validity="invalid"/>
+			<current status="accepted" date="2008-03-14"/>
+		</schemaTest>
+	</testGroup>
 </testSet>
\ No newline at end of file
-- 
GitLab