Skip to content

Commit dd1c85f

Browse files
barclay-regrfscholte
authored andcommitted
Fix off issue #22 <?m2e execute onConfiguration?> fails if pom is big… (#23)
* Fix off issue #22 <?m2e execute onConfiguration?> fails if pom is big enough (8kb) * fixed pom parser, as logic to check for x-m-l letters does not respected input tokenization * Fix off issue #22 added unit tests * 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
1 parent 21cedc9 commit dd1c85f

File tree

2 files changed

+69
-5
lines changed

2 files changed

+69
-5
lines changed

src/main/java/org/codehaus/plexus/util/xml/pull/MXParser.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -2469,7 +2469,7 @@ protected boolean parsePI()
24692469
if(tokenize) posStart = pos;
24702470
final int curLine = lineNumber;
24712471
final int curColumn = columnNumber;
2472-
int piTargetStart = pos + bufAbsoluteStart;
2472+
int piTargetStart = pos;
24732473
int piTargetEnd = -1;
24742474
final boolean normalizeIgnorableWS = tokenize == true && roundtripSupported == false;
24752475
boolean normalizedCR = false;
@@ -2495,7 +2495,7 @@ protected boolean parsePI()
24952495
seenQ = false;
24962496
} else {
24972497
if(piTargetEnd == -1 && isS(ch)) {
2498-
piTargetEnd = pos - 1 + bufAbsoluteStart;
2498+
piTargetEnd = pos - 1;
24992499

25002500
// [17] PITarget ::= Name - (('X' | 'x') ('M' | 'm') ('L' | 'l'))
25012501
if((piTargetEnd - piTargetStart) == 3) {
@@ -2520,7 +2520,7 @@ protected boolean parsePI()
25202520
}
25212521
parseXmlDecl(ch);
25222522
if(tokenize) posEnd = pos - 2;
2523-
final int off = piTargetStart - bufAbsoluteStart + 3;
2523+
final int off = piTargetStart + 3;
25242524
final int len = pos - 2 - off;
25252525
xmlDeclContent = newString(buf, off, len);
25262526
return false;
@@ -2575,8 +2575,6 @@ protected boolean parsePI()
25752575
//throw new XmlPullParserException(
25762576
// "processing instruction must have PITarget name", this, null);
25772577
}
2578-
piTargetStart -= bufAbsoluteStart;
2579-
piTargetEnd -= bufAbsoluteStart;
25802578
if(tokenize) {
25812579
posEnd = pos - 2;
25822580
if(normalizeIgnorableWS) {

src/test/java/org/codehaus/plexus/util/xml/pull/MXParserTest.java

+66
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,70 @@ public void testProcessingInstruction()
162162
assertEquals( XmlPullParser.TEXT, parser.nextToken() );
163163
assertEquals( XmlPullParser.END_TAG, parser.nextToken() );
164164
}
165+
166+
public void testSubsequentProcessingInstructionShort()
167+
throws Exception
168+
{
169+
StringBuffer sb = new StringBuffer();
170+
171+
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
172+
sb.append("<project>");
173+
sb.append("<!-- comment -->");
174+
sb.append("<?m2e ignore?>");
175+
sb.append("</project>");
176+
177+
178+
MXParser parser = new MXParser();
179+
parser.setInput( new StringReader( sb.toString() ) );
180+
181+
182+
assertEquals( XmlPullParser.PROCESSING_INSTRUCTION, parser.nextToken() );
183+
assertEquals( XmlPullParser.START_TAG, parser.nextToken() );
184+
assertEquals( XmlPullParser.COMMENT, parser.nextToken() );
185+
assertEquals( XmlPullParser.PROCESSING_INSTRUCTION, parser.nextToken() );
186+
assertEquals( XmlPullParser.END_TAG, parser.nextToken() );
187+
}
188+
189+
public void testSubsequentProcessingInstructionMoreThan8k()
190+
throws Exception
191+
{
192+
StringBuffer sb = new StringBuffer();
193+
194+
sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
195+
sb.append("<project>");
196+
197+
198+
// add ten times 1000 chars as comment
199+
for (int j = 0; j < 10; j++) {
200+
201+
sb.append("<!-- ");
202+
for (int i = 0; i < 2000; i++) {
203+
sb.append("ten bytes ");
204+
}
205+
sb.append(" -->");
206+
}
207+
208+
sb.append("<?m2e ignore?>");
209+
sb.append("</project>");
210+
211+
212+
MXParser parser = new MXParser();
213+
parser.setInput( new StringReader( sb.toString() ) );
214+
215+
216+
assertEquals( XmlPullParser.PROCESSING_INSTRUCTION, parser.nextToken() );
217+
assertEquals( XmlPullParser.START_TAG, parser.nextToken() );
218+
assertEquals( XmlPullParser.COMMENT, parser.nextToken() );
219+
assertEquals( XmlPullParser.COMMENT, parser.nextToken() );
220+
assertEquals( XmlPullParser.COMMENT, parser.nextToken() );
221+
assertEquals( XmlPullParser.COMMENT, parser.nextToken() );
222+
assertEquals( XmlPullParser.COMMENT, parser.nextToken() );
223+
assertEquals( XmlPullParser.COMMENT, parser.nextToken() );
224+
assertEquals( XmlPullParser.COMMENT, parser.nextToken() );
225+
assertEquals( XmlPullParser.COMMENT, parser.nextToken() );
226+
assertEquals( XmlPullParser.COMMENT, parser.nextToken() );
227+
assertEquals( XmlPullParser.COMMENT, parser.nextToken() );
228+
assertEquals( XmlPullParser.PROCESSING_INSTRUCTION, parser.nextToken() );
229+
assertEquals( XmlPullParser.END_TAG, parser.nextToken() );
230+
}
165231
}

0 commit comments

Comments
 (0)