From 1bb3d93c941d34329b2d36a38a4c6f8c0e1905d0 Mon Sep 17 00:00:00 2001 From: Robert Kleinschmager Date: Sun, 2 Apr 2017 17:47:41 +0200 Subject: [PATCH 1/3] Fix off issue #22 fails if pom is big enough (8kb) * fixed pom parser, as logic to check for x-m-l letters does not respected input tokenization --- .../java/org/codehaus/plexus/util/xml/pull/MXParser.java | 8 +++----- 1 file changed, 3 insertions(+), 5 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 263537ab..24c71095 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 @@ -2469,7 +2469,7 @@ protected boolean parsePI() if(tokenize) posStart = pos; final int curLine = lineNumber; final int curColumn = columnNumber; - int piTargetStart = pos + bufAbsoluteStart; + int piTargetStart = pos; int piTargetEnd = -1; final boolean normalizeIgnorableWS = tokenize == true && roundtripSupported == false; boolean normalizedCR = false; @@ -2495,7 +2495,7 @@ protected boolean parsePI() seenQ = false; } else { if(piTargetEnd == -1 && isS(ch)) { - piTargetEnd = pos - 1 + bufAbsoluteStart; + piTargetEnd = pos - 1; // [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l')) if((piTargetEnd - piTargetStart) == 3) { @@ -2520,7 +2520,7 @@ protected boolean parsePI() } parseXmlDecl(ch); if(tokenize) posEnd = pos - 2; - final int off = piTargetStart - bufAbsoluteStart + 3; + final int off = piTargetStart + 3; final int len = pos - 2 - off; xmlDeclContent = newString(buf, off, len); return false; @@ -2575,8 +2575,6 @@ protected boolean parsePI() //throw new XmlPullParserException( // "processing instruction must have PITarget name", this, null); } - piTargetStart -= bufAbsoluteStart; - piTargetEnd -= bufAbsoluteStart; if(tokenize) { posEnd = pos - 2; if(normalizeIgnorableWS) { From 86b68cd5b10dd0f8587ae1997bfa7554ccf64b66 Mon Sep 17 00:00:00 2001 From: Robert Kleinschmager Date: Wed, 26 Apr 2017 22:34:32 +0200 Subject: [PATCH 2/3] Fix off issue #22 added unit tests --- .../plexus/util/xml/pull/MXParserTest.java | 53 +++++++++++++++++++ 1 file changed, 53 insertions(+) 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 7a013933..4ef7cd69 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 @@ -162,4 +162,57 @@ public void testProcessingInstruction() assertEquals( XmlPullParser.TEXT, parser.nextToken() ); assertEquals( XmlPullParser.END_TAG, parser.nextToken() ); } + + public void testSubsequentProcessingInstructionShort() + throws Exception + { + StringBuffer sb = new StringBuffer(); + + sb.append(""); + sb.append(""); + sb.append(""); + sb.append(""); + 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.COMMENT, parser.nextToken() ); + assertEquals( XmlPullParser.PROCESSING_INSTRUCTION, parser.nextToken() ); + assertEquals( XmlPullParser.END_TAG, parser.nextToken() ); + } + + public void testSubsequentProcessingInstructionMoreThan8k() + throws Exception + { + StringBuffer sb = new StringBuffer(); + + sb.append(""); + sb.append(""); + + sb.append(""); + sb.append(""); + 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.COMMENT, parser.nextToken() ); + assertEquals( XmlPullParser.PROCESSING_INSTRUCTION, parser.nextToken() ); + assertEquals( XmlPullParser.END_TAG, parser.nextToken() ); + } } From 19d91ad1a34d3e7b878ad9c6bf001d9b25debd7a Mon Sep 17 00:00:00 2001 From: Robert Kleinschmager Date: Thu, 27 Apr 2017 07:49:43 +0200 Subject: [PATCH 3/3] Fix off issue #22 fixed unit test, so it fails for the old code * old unit test implementation was trapped by the buffer resizing (for the one, big 10k chars xml comment), so this was tailored into 10 * 1000 chars xml comments --- .../plexus/util/xml/pull/MXParserTest.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) 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 4ef7cd69..be3559da 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 @@ -194,13 +194,17 @@ public void testSubsequentProcessingInstructionMoreThan8k() sb.append(""); sb.append(""); - sb.append(""); } - sb.append(" -->"); sb.append(""); sb.append(""); @@ -212,6 +216,15 @@ public void testSubsequentProcessingInstructionMoreThan8k() assertEquals( XmlPullParser.PROCESSING_INSTRUCTION, parser.nextToken() ); assertEquals( XmlPullParser.START_TAG, parser.nextToken() ); assertEquals( XmlPullParser.COMMENT, parser.nextToken() ); + assertEquals( XmlPullParser.COMMENT, parser.nextToken() ); + assertEquals( XmlPullParser.COMMENT, parser.nextToken() ); + assertEquals( XmlPullParser.COMMENT, parser.nextToken() ); + assertEquals( XmlPullParser.COMMENT, parser.nextToken() ); + assertEquals( XmlPullParser.COMMENT, parser.nextToken() ); + assertEquals( XmlPullParser.COMMENT, parser.nextToken() ); + assertEquals( XmlPullParser.COMMENT, parser.nextToken() ); + assertEquals( XmlPullParser.COMMENT, parser.nextToken() ); + assertEquals( XmlPullParser.COMMENT, parser.nextToken() ); assertEquals( XmlPullParser.PROCESSING_INSTRUCTION, parser.nextToken() ); assertEquals( XmlPullParser.END_TAG, parser.nextToken() ); }