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 4f1955a1..430c2236 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 @@ -3274,9 +3274,21 @@ private void parseXmlDeclWithVersion( int versionStart, int versionEnd ) // [80] EncodingDecl ::= S 'encoding' Eq ('"' EncName '"' | "'" EncName "'" ) char ch = more(); + char prevCh = ch; ch = skipS( ch ); + + if ( ch != 'e' && ch != 's' && ch != '?' && ch != '>' ) + { + throw new XmlPullParserException( "unexpected character " + printable( ch ), this, null ); + } + if ( ch == 'e' ) { + if ( !isS( prevCh ) ) + { + throw new XmlPullParserException( "expected a space after version and not " + printable( ch ), this, + null ); + } ch = more(); ch = requireInput( ch, NCODING ); ch = skipS( ch ); diff --git a/src/test/java/org/codehaus/plexus/util/xml/pull/IBMXML10Tests_Test_IBMXMLConformanceTestSuite_not_wftests_Test_IBMXMLConformanceTestSuite_Production32_Test.java b/src/test/java/org/codehaus/plexus/util/xml/pull/IBMXML10Tests_Test_IBMXMLConformanceTestSuite_not_wftests_Test_IBMXMLConformanceTestSuite_Production32_Test.java index 29ba3947..d3e5f31a 100644 --- a/src/test/java/org/codehaus/plexus/util/xml/pull/IBMXML10Tests_Test_IBMXMLConformanceTestSuite_not_wftests_Test_IBMXMLConformanceTestSuite_Production32_Test.java +++ b/src/test/java/org/codehaus/plexus/util/xml/pull/IBMXML10Tests_Test_IBMXMLConformanceTestSuite_not_wftests_Test_IBMXMLConformanceTestSuite_Production32_Test.java @@ -105,7 +105,7 @@ public void testibm_not_wf_P32_ibm32n03xml() } catch ( XmlPullParserException e ) { - assertTrue( e.getMessage().contains( "expected ?> as last part of IBM XML Conformance Test Suite - Production 80 + * XML test files base folder:
xmlconf/ibm/
+ * + * @author Gabriel Belingueres + */ +public class IBMXML10Tests_Test_IBMXMLConformanceTestSuite_not_wftests_Test_IBMXMLConformanceTestSuite_Production80_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-P80-ibm80n01.xml
+ * Test URI:
not-wf/P80/ibm80n01.xml
+ * Comment:
Tests EncodingDecl with a required field missing. The leading white      space is missing in the EncodingDecl in the XMLDecl.
+ * Sections:
4.3.3
+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P80_ibm80n01xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P80/ibm80n01.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests EncodingDecl with a required field missing. The leading white space is missing in the EncodingDecl in the XMLDecl." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "expected a space after version and not e" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P80-ibm80n02.xml
+ * Test URI:
not-wf/P80/ibm80n02.xml
+ * Comment:
Tests EncodingDecl with a required field missing. The "=" sign is      missing in the EncodingDecl in the XMLDecl.
+ * Sections:
4.3.3
+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P80_ibm80n02xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P80/ibm80n02.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests EncodingDecl with a required field missing. The \"=\" sign is missing in the EncodingDecl in the XMLDecl." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "expected equals sign (=) after encoding and not \"" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P80-ibm80n03.xml
+ * Test URI:
not-wf/P80/ibm80n03.xml
+ * Comment:
Tests EncodingDecl with a required field missing. The double quoted      EncName are missing in the EncodingDecl in the XMLDecl.
+ * Sections:
4.3.3
+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P80_ibm80n03xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P80/ibm80n03.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests EncodingDecl with a required field missing. The double quoted EncName are missing in the EncodingDecl in the XMLDecl." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "expected apostrophe (') or quotation mark (\") after encoding and not ?" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P80-ibm80n04.xml
+ * Test URI:
not-wf/P80/ibm80n04.xml
+ * Comment:
Tests EncodingDecl with wrong field ordering. The string "encoding="    occurs after the double quoted EncName in the EncodingDecl in the XMLDecl.
+ * Sections:
4.3.3
+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P80_ibm80n04xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P80/ibm80n04.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests EncodingDecl with wrong field ordering. The string \"encoding=\" occurs after the double quoted EncName in the EncodingDecl in the XMLDecl." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "unexpected character \"" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P80-ibm80n05.xml
+ * Test URI:
not-wf/P80/ibm80n05.xml
+ * Comment:
Tests EncodingDecl with wrong field ordering. The "encoding" occurs     after the double quoted EncName in the EncodingDecl in the XMLDecl.
+ * Sections:
4.3.3
+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P80_ibm80n05xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P80/ibm80n05.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests EncodingDecl with wrong field ordering. The \"encoding\" occurs after the double quoted EncName in the EncodingDecl in the XMLDecl." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "unexpected character \"" ) ); + } + } + + /** + * Test ID:
ibm-not-wf-P80-ibm80n06.xml
+ * Test URI:
not-wf/P80/ibm80n06.xml
+ * Comment:
Tests EncodingDecl with wrong key word. The string "Encoding" is      used as the key word in the EncodingDecl in the XMLDecl.
+ * Sections:
4.3.3
+ * Version: + * + * @throws IOException if there is an I/O error + */ + @Test + public void testibm_not_wf_P80_ibm80n06xml() + throws IOException + { + try ( Reader reader = new FileReader( new File( testResourcesDir, "not-wf/P80/ibm80n06.xml" ) ) ) + { + parser.setInput( reader ); + while ( parser.nextToken() != XmlPullParser.END_DOCUMENT ) + ; + fail( "Tests EncodingDecl with wrong key word. The string \"Encoding\" is used as the key word in the EncodingDecl in the XMLDecl." ); + } + catch ( XmlPullParserException e ) + { + assertTrue( e.getMessage().contains( "unexpected character E" ) ); + } + } + +} diff --git a/src/test/resources/xmlconf/ibm/not-wf/P80/ibm80n01.xml b/src/test/resources/xmlconf/ibm/not-wf/P80/ibm80n01.xml new file mode 100755 index 00000000..7cc18ce4 --- /dev/null +++ b/src/test/resources/xmlconf/ibm/not-wf/P80/ibm80n01.xml @@ -0,0 +1,8 @@ + + + + +]> + diff --git a/src/test/resources/xmlconf/ibm/not-wf/P80/ibm80n02.xml b/src/test/resources/xmlconf/ibm/not-wf/P80/ibm80n02.xml new file mode 100755 index 00000000..3ee667bc --- /dev/null +++ b/src/test/resources/xmlconf/ibm/not-wf/P80/ibm80n02.xml @@ -0,0 +1,8 @@ + + + + +]> + diff --git a/src/test/resources/xmlconf/ibm/not-wf/P80/ibm80n03.xml b/src/test/resources/xmlconf/ibm/not-wf/P80/ibm80n03.xml new file mode 100755 index 00000000..9cd9b893 --- /dev/null +++ b/src/test/resources/xmlconf/ibm/not-wf/P80/ibm80n03.xml @@ -0,0 +1,8 @@ + + + + +]> + diff --git a/src/test/resources/xmlconf/ibm/not-wf/P80/ibm80n04.xml b/src/test/resources/xmlconf/ibm/not-wf/P80/ibm80n04.xml new file mode 100755 index 00000000..48fbfa17 --- /dev/null +++ b/src/test/resources/xmlconf/ibm/not-wf/P80/ibm80n04.xml @@ -0,0 +1,8 @@ + + + + +]> + diff --git a/src/test/resources/xmlconf/ibm/not-wf/P80/ibm80n05.xml b/src/test/resources/xmlconf/ibm/not-wf/P80/ibm80n05.xml new file mode 100755 index 00000000..a805fd65 --- /dev/null +++ b/src/test/resources/xmlconf/ibm/not-wf/P80/ibm80n05.xml @@ -0,0 +1,8 @@ + + + + +]> + diff --git a/src/test/resources/xmlconf/ibm/not-wf/P80/ibm80n06.xml b/src/test/resources/xmlconf/ibm/not-wf/P80/ibm80n06.xml new file mode 100755 index 00000000..f0b36cdd --- /dev/null +++ b/src/test/resources/xmlconf/ibm/not-wf/P80/ibm80n06.xml @@ -0,0 +1,8 @@ + + + + +]> +