From 724c56d0a6fd9f1fc71d7e1c205570c8f4e5f22e Mon Sep 17 00:00:00 2001 From: Gabriel Belingueres Date: Sun, 24 Jan 2021 19:56:37 -0300 Subject: [PATCH] Fix MXParser not failing when space is missing in xml declaration (#128) (#129) fix #128 --- .../plexus/util/xml/pull/MXParser.java | 2 +- ...onformanceTestSuite_Production24_Test.java | 271 ++++++++++++++++++ .../xmlconf/ibm/not-wf/P24/ibm24n01.xml | 6 + .../xmlconf/ibm/not-wf/P24/ibm24n02.xml | 6 + .../xmlconf/ibm/not-wf/P24/ibm24n03.xml | 6 + .../xmlconf/ibm/not-wf/P24/ibm24n04.xml | 6 + .../xmlconf/ibm/not-wf/P24/ibm24n05.xml | 6 + .../xmlconf/ibm/not-wf/P24/ibm24n06.xml | 6 + .../xmlconf/ibm/not-wf/P24/ibm24n07.xml | 6 + .../xmlconf/ibm/not-wf/P24/ibm24n08.xml | 6 + .../xmlconf/ibm/not-wf/P24/ibm24n09.xml | 6 + 11 files changed, 326 insertions(+), 1 deletion(-) create mode 100644 src/test/java/org/codehaus/plexus/util/xml/pull/IBMXML10Tests_Test_IBMXMLConformanceTestSuite_not_wftests_Test_IBMXMLConformanceTestSuite_Production24_Test.java create mode 100755 src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n01.xml create mode 100755 src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n02.xml create mode 100755 src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n03.xml create mode 100755 src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n04.xml create mode 100755 src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n05.xml create mode 100755 src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n06.xml create mode 100755 src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n07.xml create mode 100755 src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n08.xml create mode 100755 src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n09.xml diff --git a/src/main/java/org/codehaus/plexus/util/xml/pull/MXParser.java b/src/main/java/org/codehaus/plexus/util/xml/pull/MXParser.java index a9f88752..b6934d48 100644 --- a/src/main/java/org/codehaus/plexus/util/xml/pull/MXParser.java +++ b/src/main/java/org/codehaus/plexus/util/xml/pull/MXParser.java @@ -3113,7 +3113,7 @@ else if ( ch == '<' ) piTargetEnd = pos - 1; // [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l')) - if ( ( piTargetEnd - piTargetStart ) == 3 ) + if ( ( piTargetEnd - piTargetStart ) >= 3 ) { if ( ( buf[piTargetStart] == 'x' || buf[piTargetStart] == 'X' ) && ( buf[piTargetStart + 1] == 'm' || buf[piTargetStart + 1] == 'M' ) diff --git a/src/test/java/org/codehaus/plexus/util/xml/pull/IBMXML10Tests_Test_IBMXMLConformanceTestSuite_not_wftests_Test_IBMXMLConformanceTestSuite_Production24_Test.java b/src/test/java/org/codehaus/plexus/util/xml/pull/IBMXML10Tests_Test_IBMXMLConformanceTestSuite_not_wftests_Test_IBMXMLConformanceTestSuite_Production24_Test.java new file mode 100644 index 00000000..587083a5 --- /dev/null +++ b/src/test/java/org/codehaus/plexus/util/xml/pull/IBMXML10Tests_Test_IBMXMLConformanceTestSuite_not_wftests_Test_IBMXMLConformanceTestSuite_Production24_Test.java @@ -0,0 +1,271 @@ +package org.codehaus.plexus.util.xml.pull; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.IOException; +import java.io.Reader; + +import org.junit.Before; +import org.junit.Test; + +/** + * Test class that execute a particular set of tests associated to a TESCASES tag from the XML W3C Conformance Tests. + * TESCASES PROFILE:
IBM XML Conformance Test Suite - Production 24
+ * XML test files base folder:
xmlconf/ibm/
+ * + * @author Gabriel Belingueres + */ +public class IBMXML10Tests_Test_IBMXMLConformanceTestSuite_not_wftests_Test_IBMXMLConformanceTestSuite_Production24_Test +{ + + final static File testResourcesDir = new File( "src/test/resources/", "xmlconf/ibm/" ); + + MXParser parser; + + @Before + public void setUp() + { + parser = new MXParser(); + } + + /** + * Test ID:
ibm-not-wf-P24-ibm24n01.xml
+ * Test URI:
not-wf/P24/ibm24n01.xml
+ * Comment:
Tests VersionInfo with a required field missing. The VersionNum is     missing in the VersionInfo in the XMLDecl.
+ * Sections:
2.8
+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P24_ibm24n01xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P24/ibm24n01.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests VersionInfo with a required field missing. The VersionNum is missing in the VersionInfo in the XMLDecl." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "expected apostrophe (') or quotation mark (\") after version and not ?" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P24-ibm24n02.xml
+ * Test URI:
not-wf/P24/ibm24n02.xml
+ * Comment:
Tests VersionInfo with a required field missing. The white space is     missing between the key word "xml" and the VersionInfo in the XMLDecl.
+ * Sections:
2.8
+ * Version: + * + * @throws XmlPullParserException if there is a problem parsing the XML file + * @throws FileNotFoundException if the testing XML file is not found + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P24_ibm24n02xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P24/ibm24n02.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests VersionInfo with a required field missing. The white space is missing between the key word \"xml\" and the VersionInfo in the XMLDecl." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "expected v in version and not ?" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P24-ibm24n03.xml
+ * Test URI:
not-wf/P24/ibm24n03.xml
+ * Comment:
Tests VersionInfo with a required field missing. The "="      (equal sign) is missing between the key word "version" and the VersionNum.
+ * Sections:
2.8
+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P24_ibm24n03xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P24/ibm24n03.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests VersionInfo with a required field missing. The \"=\" (equal sign) is missing between the key word \"version\" and the VersionNum." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "expected equals sign (=) after version and not \\'" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P24-ibm24n04.xml
+ * Test URI:
not-wf/P24/ibm24n04.xml
+ * Comment:
Tests VersionInfo with wrong field ordering. The VersionNum     occurs before "=" and "version".
+ * Sections:
2.8
+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P24_ibm24n04xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P24/ibm24n04.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests VersionInfo with wrong field ordering. The VersionNum occurs before \"=\" and \"version\"." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "expected v in version and not \\'" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P24-ibm24n05.xml
+ * Test URI:
not-wf/P24/ibm24n05.xml
+ * Comment:
Tests VersionInfo with wrong field ordering. The "=" occurs     after "version" and the VersionNum.
+ * Sections:
2.8
+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P24_ibm24n05xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P24/ibm24n05.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests VersionInfo with wrong field ordering. The \"=\" occurs after \"version\" and the VersionNum." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "expected equals sign (=) after version and not \\'" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P24-ibm24n06.xml
+ * Test URI:
not-wf/P24/ibm24n06.xml
+ * Comment:
Tests VersionInfo with the wrong key word "Version".
+ * Sections:
2.8
+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P24_ibm24n06xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P24/ibm24n06.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests VersionInfo with the wrong key word \"Version\"." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "expected v in version and not V" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P24-ibm24n07.xml
+ * Test URI:
not-wf/P24/ibm24n07.xml
+ * Comment:
Tests VersionInfo with the wrong key word "versioN".
+ * Sections:
2.8
+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P24_ibm24n07xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P24/ibm24n07.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests VersionInfo with the wrong key word \"versioN\"." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "expected n in version and not N" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P24-ibm24n08.xml
+ * Test URI:
not-wf/P24/ibm24n08.xml
+ * Comment:
Tests VersionInfo with mismatched quotes around the VersionNum.      version = '1.0" is used as the VersionInfo.
+ * Sections:
2.8
+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P24_ibm24n08xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P24/ibm24n08.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests VersionInfo with mismatched quotes around the VersionNum. version = '1.0\" is used as the VersionInfo." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "ibm-not-wf-P24-ibm24n09.xml + * Test URI:
not-wf/P24/ibm24n09.xml
+ * Comment:
Tests VersionInfo with mismatched quotes around the VersionNum.      The closing bracket for the VersionNum is missing.
+ * Sections:
2.8
+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P24_ibm24n09xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P24/ibm24n09.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests VersionInfo with mismatched quotes around the VersionNum. The closing bracket for the VersionNum is missing." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( " + +]> + + \ No newline at end of file diff --git a/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n02.xml b/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n02.xml new file mode 100755 index 00000000..8a3a4004 --- /dev/null +++ b/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n02.xml @@ -0,0 +1,6 @@ + + +]> + + \ No newline at end of file diff --git a/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n03.xml b/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n03.xml new file mode 100755 index 00000000..903a5c3b --- /dev/null +++ b/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n03.xml @@ -0,0 +1,6 @@ + + +]> + + \ No newline at end of file diff --git a/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n04.xml b/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n04.xml new file mode 100755 index 00000000..0c603b93 --- /dev/null +++ b/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n04.xml @@ -0,0 +1,6 @@ + + +]> + + \ No newline at end of file diff --git a/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n05.xml b/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n05.xml new file mode 100755 index 00000000..09c191be --- /dev/null +++ b/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n05.xml @@ -0,0 +1,6 @@ + + +]> + + \ No newline at end of file diff --git a/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n06.xml b/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n06.xml new file mode 100755 index 00000000..f2aeef6a --- /dev/null +++ b/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n06.xml @@ -0,0 +1,6 @@ + + +]> + + \ No newline at end of file diff --git a/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n07.xml b/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n07.xml new file mode 100755 index 00000000..7cd34539 --- /dev/null +++ b/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n07.xml @@ -0,0 +1,6 @@ + + +]> + + \ No newline at end of file diff --git a/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n08.xml b/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n08.xml new file mode 100755 index 00000000..f162261f --- /dev/null +++ b/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n08.xml @@ -0,0 +1,6 @@ + + +]> + + \ No newline at end of file diff --git a/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n09.xml b/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n09.xml new file mode 100755 index 00000000..886e084a --- /dev/null +++ b/src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n09.xml @@ -0,0 +1,6 @@ + + +]> + + \ No newline at end of file