From 2450481b1ee0b368a8b77caf7758d15a7a4b58be Mon Sep 17 00:00:00 2001 From: Todd Lipcon Date: Wed, 8 May 2019 10:06:47 -0700 Subject: [PATCH] Fix parsing of processing instructions containing '>' (issue #65) --- .../plexus/util/xml/pull/MXParser.java | 6 ----- .../plexus/util/xml/pull/MXParserTest.java | 25 +++++++++++++++++++ 2 files changed, 25 insertions(+), 6 deletions(-) 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 cd618dcb..38a9ba1a 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 @@ -3051,12 +3051,6 @@ else if ( ch == '>' ) throw new XmlPullParserException( "processing instruction PITarget name not found", this, null ); } - else - { - // seenPITarget && !seenQ - throw new XmlPullParserException( "processing instruction started on line " + curLine - + " and column " + curColumn + " was not closed", this, null ); - } } else { diff --git a/src/test/java/org/codehaus/plexus/util/xml/pull/MXParserTest.java b/src/test/java/org/codehaus/plexus/util/xml/pull/MXParserTest.java index 265fb113..79fb64b1 100644 --- a/src/test/java/org/codehaus/plexus/util/xml/pull/MXParserTest.java +++ b/src/test/java/org/codehaus/plexus/util/xml/pull/MXParserTest.java @@ -301,6 +301,31 @@ public void testProcessingInstruction() assertEquals( XmlPullParser.END_TAG, parser.nextToken() ); } + @Test + public void testProcessingInstructionsContainingXml() + throws Exception + { + StringBuffer sb = new StringBuffer(); + + sb.append( "" ); + sb.append( "\n" ); + sb.append( " \n" ); + sb.append( " \n" ); + sb.append( " ?>\n" ); + sb.append( "" ); + + MXParser parser = new MXParser(); + parser.setInput( new StringReader( sb.toString() ) ); + + assertEquals( XmlPullParser.PROCESSING_INSTRUCTION, parser.nextToken() ); + assertEquals( XmlPullParser.START_TAG, parser.nextToken() ); + assertEquals( XmlPullParser.TEXT, parser.nextToken() ); // whitespace + assertEquals( XmlPullParser.PROCESSING_INSTRUCTION, parser.nextToken() ); + assertEquals( XmlPullParser.TEXT, parser.nextToken() ); // whitespace + assertEquals( XmlPullParser.END_TAG, parser.nextToken() ); + } + @Test public void testSubsequentProcessingInstructionShort() throws Exception