Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Invalid pi #122

Closed
wants to merge 2 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 6 additions & 2 deletions src/main/java/org/codehaus/plexus/util/xml/pull/MXParser.java
Expand Up @@ -460,7 +460,7 @@ private void reset()
// System.out.println("reset() called");
location = null;
lineNumber = 1;
columnNumber = 0;
columnNumber = 1;
seenRoot = false;
reachedEnd = false;
eventType = START_DOCUMENT;
Expand Down Expand Up @@ -3082,7 +3082,11 @@ else if ( !seenInnerTag )
{
// seenPITarget && !seenQ
throw new XmlPullParserException( "processing instruction started on line " + curLine
+ " and column " + curColumn + " was not closed", this, null );
+ " and column " + (curColumn -2) + " was not closed", this, null );
}
else
{
seenInnerTag = false;
}
}
else if ( ch == '<' )
Expand Down
68 changes: 66 additions & 2 deletions src/test/java/org/codehaus/plexus/util/xml/pull/MXParserTest.java
Expand Up @@ -286,6 +286,35 @@ public void testValidCharacterReferenceDecimal()
}
}

@Test
public void testParserPosition()
throws Exception
{
String input = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!-- A --> \n <!-- B --><test>\tnnn</test>\n<!-- C\nC -->";

MXParser parser = new MXParser();
parser.setInput( new StringReader( input ) );

assertEquals( XmlPullParser.PROCESSING_INSTRUCTION, parser.nextToken() );
assertPosition( 1, 39, parser );
assertEquals( XmlPullParser.COMMENT, parser.nextToken() );
assertPosition( 1, 49, parser );
assertEquals( XmlPullParser.IGNORABLE_WHITESPACE, parser.nextToken() );
assertPosition( 2, 3, parser ); // end when next token starts
assertEquals( XmlPullParser.COMMENT, parser.nextToken() );
assertPosition( 2, 12, parser );
assertEquals( XmlPullParser.START_TAG, parser.nextToken() );
assertPosition( 2, 18, parser );
assertEquals( XmlPullParser.TEXT, parser.nextToken() );
assertPosition( 2, 23, parser ); // end when next token starts
assertEquals( XmlPullParser.END_TAG, parser.nextToken() );
assertPosition( 2, 29, parser );
assertEquals( XmlPullParser.IGNORABLE_WHITESPACE, parser.nextToken() );
assertPosition( 3, 2, parser ); // end when next token starts
assertEquals( XmlPullParser.COMMENT, parser.nextToken() );
assertPosition( 4, 6, parser );
}

@Test
public void testProcessingInstruction()
throws Exception
Expand Down Expand Up @@ -326,6 +355,37 @@ public void testProcessingInstructionsContainingXml()
assertEquals( XmlPullParser.END_TAG, parser.nextToken() );
}

@Test
public void testMalformedProcessingInstructionsContainingXmlNoClosingQuestionMark()
throws Exception
{
StringBuffer sb = new StringBuffer();
sb.append( "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" );
sb.append( "<project />\n" );
sb.append( "<?pi\n" );
sb.append( " <tag>\n" );
sb.append( " </tag>>\n" );

MXParser parser = new MXParser();
parser.setInput( new StringReader( sb.toString() ) );

try
{
assertEquals( XmlPullParser.PROCESSING_INSTRUCTION, parser.nextToken() );
assertEquals( XmlPullParser.IGNORABLE_WHITESPACE, parser.nextToken() );
assertEquals( XmlPullParser.START_TAG, parser.nextToken() );
assertEquals( XmlPullParser.END_TAG, parser.nextToken() );
assertEquals( XmlPullParser.IGNORABLE_WHITESPACE, parser.nextToken() );
assertEquals( XmlPullParser.PROCESSING_INSTRUCTION, parser.nextToken() );

fail( "Should fail since it has invalid PI" );
}
catch ( XmlPullParserException ex )
{
assertTrue( ex.getMessage().contains( "processing instruction started on line 3 and column 1 was not closed" ) );
}
}

@Test
public void testSubsequentProcessingInstructionShort()
throws Exception
Expand Down Expand Up @@ -517,7 +577,7 @@ public void testMalformedProcessingInstructionNoClosingQuestionMark()
}
catch ( XmlPullParserException ex )
{
assertTrue( ex.getMessage().contains( "processing instruction started on line 1 and column 2 was not closed" ) );
assertTrue( ex.getMessage().contains( "processing instruction started on line 1 and column 1 was not closed" ) );
}
}

Expand Down Expand Up @@ -545,7 +605,7 @@ public void testSubsequentMalformedProcessingInstructionNoClosingQuestionMark()
}
catch ( XmlPullParserException ex )
{
assertTrue( ex.getMessage().contains( "processing instruction started on line 1 and column 13 was not closed" ) );
assertTrue( ex.getMessage().contains( "processing instruction started on line 1 and column 12 was not closed" ) );
}
}

Expand Down Expand Up @@ -661,4 +721,8 @@ public void testMalformedXMLRootElement5()
}
}

private static void assertPosition(int row, int col, MXParser parser) {
assertEquals("Current line", row, parser.getLineNumber());
assertEquals("Current column", col, parser.getColumnNumber());
}
}