diff options
-rw-r--r-- | expectations/knownfailures.txt | 8 | ||||
-rw-r--r-- | xml/src/main/java/org/kxml2/io/KXmlParser.java | 9 |
2 files changed, 9 insertions, 8 deletions
diff --git a/expectations/knownfailures.txt b/expectations/knownfailures.txt index d86c11c14d..852c400f01 100644 --- a/expectations/knownfailures.txt +++ b/expectations/knownfailures.txt @@ -74,14 +74,6 @@ bug: 3387758 }, { - description: "KxmlPullParser doesn't enforce top-level document element", - names: [ - "libcore.xml.KxmlPullParserDtdTest#testDoctypeInDocumentElement", - "libcore.xml.KxmlPullParserDtdTest#testDoctypeAfterDocumentElement" - ], - bug: 3452274 -}, -{ description: "URLConnection fails on URLs containing {}", name: "libcore.java.net.URLConnectionTest#testMalformedUrl", bug: 1158780, diff --git a/xml/src/main/java/org/kxml2/io/KXmlParser.java b/xml/src/main/java/org/kxml2/io/KXmlParser.java index 84376ae736..a90db3b988 100644 --- a/xml/src/main/java/org/kxml2/io/KXmlParser.java +++ b/xml/src/main/java/org/kxml2/io/KXmlParser.java @@ -163,6 +163,9 @@ public class KXmlParser implements XmlPullParser, Closeable { private boolean degenerated; private int attributeCount; + // true iff. we've encountered the START_TAG of an XML element at depth == 0; + private boolean parsedTopLevelStartTag; + /* * The current element's attributes arranged in groups of 4: * i + 0 = attribute namespace URI @@ -416,6 +419,9 @@ public class KXmlParser implements XmlPullParser, Closeable { break; case DOCDECL: readDoctype(justOneToken); + if (parsedTopLevelStartTag) { + throw new XmlPullParserException("Unexpected token", this, null); + } break; default: @@ -1128,6 +1134,9 @@ public class KXmlParser implements XmlPullParser, Closeable { } int sp = depth++ * 4; + if (depth == 1) { + parsedTopLevelStartTag = true; + } elementStack = ensureCapacity(elementStack, sp + 4); elementStack[sp + 3] = name; |