Skip to content

Commit 44a8f2c

Browse files
committed
Fix detection of invalid spaces in prolog
1 parent 27d6127 commit 44a8f2c

File tree

3 files changed

+30
-2
lines changed

3 files changed

+30
-2
lines changed

pom.xml

+6
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,12 @@ limitations under the License.
7676
<version>5.9.2</version>
7777
<scope>test</scope>
7878
</dependency>
79+
<dependency>
80+
<groupId>org.hamcrest</groupId>
81+
<artifactId>hamcrest</artifactId>
82+
<version>2.2</version>
83+
<scope>test</scope>
84+
</dependency>
7985
</dependencies>
8086

8187
<build>

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

+4-2
Original file line numberDiff line numberDiff line change
@@ -2528,9 +2528,11 @@ private void parsePI() throws XmlPullParserException, IOException {
25282528
if ((buf[piTargetStart] == 'x' || buf[piTargetStart] == 'X')
25292529
&& (buf[piTargetStart + 1] == 'm' || buf[piTargetStart + 1] == 'M')
25302530
&& (buf[piTargetStart + 2] == 'l' || buf[piTargetStart + 2] == 'L')) {
2531-
if (piTargetStart > 3) { // <?xml is allowed as first characters in input ...
2531+
if (piTargetStart > 2) { // <?xml is allowed as first characters in input ...
25322532
throw new XmlPullParserException(
2533-
"processing instruction can not have PITarget with reserved xml name",
2533+
eventType == 0
2534+
? "XMLDecl is only allowed as first characters in input"
2535+
: "processing instruction can not have PITarget with reserved xml name",
25342536
this,
25352537
null);
25362538
} else {

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

+20
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
import org.junit.jupiter.api.Test;
3333

3434
import static org.junit.jupiter.api.Assertions.*;
35+
import static org.hamcrest.MatcherAssert.*;
36+
import static org.hamcrest.Matchers.*;
3537

3638
/**
3739
* <p>MXParserTest class.</p>
@@ -1473,4 +1475,22 @@ public void testProcessingInstructionTokenizeAfterXMLDeclAndBeforeFirstTag() thr
14731475
assertEquals(XmlPullParser.END_TAG, parser.nextToken());
14741476
assertEquals(XmlPullParser.END_DOCUMENT, parser.nextToken());
14751477
}
1478+
1479+
@ParameterizedTest
1480+
@ValueSource( strings = { " ", "\n", "\r", "\r\n", " ", "\n " })
1481+
void testBlankAtBeginning(String ws) throws XmlPullParserException, IOException {
1482+
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><test>nnn</test>";
1483+
1484+
MXParser parser = new MXParser();
1485+
parser.setInput(new StringReader(ws + xml));
1486+
assertThat(
1487+
assertThrows(XmlPullParserException.class, parser::next).getMessage(),
1488+
containsString("XMLDecl is only allowed as first characters in input"));
1489+
1490+
parser.setInput(new StringReader(ws + xml));
1491+
assertEquals(XmlPullParser.IGNORABLE_WHITESPACE, parser.nextToken());
1492+
assertThat(
1493+
assertThrows(XmlPullParserException.class, parser::nextToken).getMessage(),
1494+
containsString("processing instruction can not have PITarget with reserved xml name"));
1495+
}
14761496
}

0 commit comments

Comments
 (0)