Fix PullParser reuse regression
Commit 0424d12f9b8a19c4a451282bc8ae974f6109424d introduced
a regression: calling setInput() would not fully reset the
parser iff the parser had already parsed a <!DOCTYPE
tag.
This change contains a fix and a test.
Thanks to mike@ for the report.
Bug: https://code.google.com/p/android/issues/detail?id=182605
Change-Id: Icddc1c52bca3beaba7f5ee662d18757d6fce6cf2
diff --git a/luni/src/test/java/libcore/xml/PullParserTest.java b/luni/src/test/java/libcore/xml/PullParserTest.java
index b204c88..a52db1d 100644
--- a/luni/src/test/java/libcore/xml/PullParserTest.java
+++ b/luni/src/test/java/libcore/xml/PullParserTest.java
@@ -769,10 +769,24 @@
public void testWhitespacesAfterDOCTYPE() throws Exception {
XmlPullParser parser = newPullParser();
String test = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
- "<!DOCTYPE root [\n" +
- "<!ENTITY dummy \"dummy\">\n" +
- "]> \n" +
- "<root></root>";
+ "<!DOCTYPE root [\n" +
+ "<!ENTITY dummy \"dummy\">\n" +
+ "]> \n" +
+ "<root></root>";
+ assertParseSuccess(test, parser);
+ }
+
+ // Regression test for https://code.google.com/p/android/issues/detail?id=182605
+ public void testSetInputParserReuse() throws Exception {
+ XmlPullParser parser = newPullParser();
+ String test = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
+ "<!DOCTYPE root [\n" +
+ "<!ENTITY dummy \"dummy\">\n" +
+ "]> \n" +
+ "<root></root>";
+ assertParseSuccess(test, parser);
+
+ // A second call to parser.setInput() on a parser should result in a fully-reset parser.
assertParseSuccess(test, parser);
}
diff --git a/xml/src/main/java/org/kxml2/io/KXmlParser.java b/xml/src/main/java/org/kxml2/io/KXmlParser.java
index 2e32bf1..e010f1d 100644
--- a/xml/src/main/java/org/kxml2/io/KXmlParser.java
+++ b/xml/src/main/java/org/kxml2/io/KXmlParser.java
@@ -1606,6 +1606,7 @@
this.reader = reader;
type = START_DOCUMENT;
+ parsedTopLevelStartTag = false;
name = null;
namespace = null;
degenerated = false;