Skip to content

Commit

Permalink
Fix MXParser not failing when space is missing in xml declaration (#128
Browse files Browse the repository at this point in the history
…) (#129)

fix #128
  • Loading branch information
belingueres authored Jan 24, 2021
1 parent 761ac42 commit 724c56d
Show file tree
Hide file tree
Showing 11 changed files with 326 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -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' )
Expand Down
Original file line number Diff line number Diff line change
@@ -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: <pre>IBM XML Conformance Test Suite - Production 24</pre>
* XML test files base folder: <pre>xmlconf/ibm/</pre>
*
* @author <a href="mailto:[email protected]">Gabriel Belingueres</a>
*/
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: <pre>ibm-not-wf-P24-ibm24n01.xml</pre>
* Test URI: <pre>not-wf/P24/ibm24n01.xml</pre>
* Comment: <pre>Tests VersionInfo with a required field missing. The VersionNum is missing in the VersionInfo in the XMLDecl.</pre>
* Sections: <pre>2.8</pre>
* 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: <pre>ibm-not-wf-P24-ibm24n02.xml</pre>
* Test URI: <pre>not-wf/P24/ibm24n02.xml</pre>
* Comment: <pre>Tests VersionInfo with a required field missing. The white space is missing between the key word "xml" and the VersionInfo in the XMLDecl.</pre>
* Sections: <pre>2.8</pre>
* 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: <pre>ibm-not-wf-P24-ibm24n03.xml</pre>
* Test URI: <pre>not-wf/P24/ibm24n03.xml</pre>
* Comment: <pre>Tests VersionInfo with a required field missing. The "=" (equal sign) is missing between the key word "version" and the VersionNum.</pre>
* Sections: <pre>2.8</pre>
* 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: <pre>ibm-not-wf-P24-ibm24n04.xml</pre>
* Test URI: <pre>not-wf/P24/ibm24n04.xml</pre>
* Comment: <pre>Tests VersionInfo with wrong field ordering. The VersionNum occurs before "=" and "version".</pre>
* Sections: <pre>2.8</pre>
* 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: <pre>ibm-not-wf-P24-ibm24n05.xml</pre>
* Test URI: <pre>not-wf/P24/ibm24n05.xml</pre>
* Comment: <pre>Tests VersionInfo with wrong field ordering. The "=" occurs after "version" and the VersionNum.</pre>
* Sections: <pre>2.8</pre>
* 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: <pre>ibm-not-wf-P24-ibm24n06.xml</pre>
* Test URI: <pre>not-wf/P24/ibm24n06.xml</pre>
* Comment: <pre>Tests VersionInfo with the wrong key word "Version".</pre>
* Sections: <pre>2.8</pre>
* 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: <pre>ibm-not-wf-P24-ibm24n07.xml</pre>
* Test URI: <pre>not-wf/P24/ibm24n07.xml</pre>
* Comment: <pre>Tests VersionInfo with the wrong key word "versioN".</pre>
* Sections: <pre>2.8</pre>
* 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: <pre>ibm-not-wf-P24-ibm24n08.xml</pre>
* Test URI: <pre>not-wf/P24/ibm24n08.xml</pre>
* Comment: <pre>Tests VersionInfo with mismatched quotes around the VersionNum. version = '1.0" is used as the VersionInfo.</pre>
* Sections: <pre>2.8</pre>
* 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( "<?xml version value expected to be in ([a-zA-Z0-9_.:] | '-') not \"" ) );
}
}

/**
* Test ID: <pre>ibm-not-wf-P24-ibm24n09.xml</pre>
* Test URI: <pre>not-wf/P24/ibm24n09.xml</pre>
* Comment: <pre>Tests VersionInfo with mismatched quotes around the VersionNum. The closing bracket for the VersionNum is missing.</pre>
* Sections: <pre>2.8</pre>
* 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( "<?xml version value expected to be in ([a-zA-Z0-9_.:] | '-') not " ) );
}
}

}
6 changes: 6 additions & 0 deletions src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n01.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version= ?>
<!DOCTYPE doc [
<!ELEMENT doc EMPTY>
]>
<doc/>
<!-- VersioNum is missing in VersionInfo -->
6 changes: 6 additions & 0 deletions src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n02.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xmlversion='1.0' ?>
<!DOCTYPE doc [
<!ELEMENT doc EMPTY>
]>
<doc/>
<!-- S is missing in VersionInfo -->
6 changes: 6 additions & 0 deletions src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n03.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version'1.0' ?>
<!DOCTYPE doc [
<!ELEMENT doc EMPTY>
]>
<doc/>
<!-- Eq is missing in VersionInfo -->
6 changes: 6 additions & 0 deletions src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n04.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml '1.0'=version ?>
<!DOCTYPE doc [
<!ELEMENT doc EMPTY>
]>
<doc/>
<!-- Wrong ordering VersionNum Eq 'version' -->
6 changes: 6 additions & 0 deletions src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n05.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version'1.0'= ?>
<!DOCTYPE doc [
<!ELEMENT doc EMPTY>
]>
<doc/>
<!-- Wrong ordering version VersionNum Eq -->
6 changes: 6 additions & 0 deletions src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n06.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml Version='1.0' ?>
<!DOCTYPE doc [
<!ELEMENT doc EMPTY>
]>
<doc/>
<!-- Wrong key word 'Version' -->
6 changes: 6 additions & 0 deletions src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n07.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml versioN='1.0' ?>
<!DOCTYPE doc [
<!ELEMENT doc EMPTY>
]>
<doc/>
<!-- Wrong key word 'versioN' -->
6 changes: 6 additions & 0 deletions src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n08.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version='1.0" ?>
<!DOCTYPE doc [
<!ELEMENT doc EMPTY>
]>
<doc/>
<!-- Mismatched qotes in VersionInfo -->
6 changes: 6 additions & 0 deletions src/test/resources/xmlconf/ibm/not-wf/P24/ibm24n09.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version='1.0 ?>
<!DOCTYPE doc [
<!ELEMENT doc EMPTY>
]>
<doc/>
<!-- Mismatched qotes in VersionInfo -->

0 comments on commit 724c56d

Please sign in to comment.