Fix broken XML parsing idiom.
Code that expected a single top level element in an XML file
was doing something like :
while (type != START_TAG) { next(); }
This would loop forever when the XML being parsed was empty,
where each call to XmlPullParser.next() would return END_DOCUMENT.
bug: https://code.google.com/p/android/issues/detail?id=64173
Change-Id: I7543203e976a8999ae471a6c2d629249a87011bb
This commit is contained in:
@@ -64,9 +64,14 @@ public final class CompatModePackages {
|
||||
XmlPullParser parser = Xml.newPullParser();
|
||||
parser.setInput(fis, null);
|
||||
int eventType = parser.getEventType();
|
||||
while (eventType != XmlPullParser.START_TAG) {
|
||||
while (eventType != XmlPullParser.START_TAG &&
|
||||
eventType != XmlPullParser.END_DOCUMENT) {
|
||||
eventType = parser.next();
|
||||
}
|
||||
if (eventType == XmlPullParser.END_DOCUMENT) {
|
||||
return;
|
||||
}
|
||||
|
||||
String tagName = parser.getName();
|
||||
if ("compat-packages".equals(tagName)) {
|
||||
eventType = parser.next();
|
||||
|
||||
@@ -396,9 +396,14 @@ public final class UsageStatsService extends IUsageStats.Stub {
|
||||
XmlPullParser parser = Xml.newPullParser();
|
||||
parser.setInput(fis, null);
|
||||
int eventType = parser.getEventType();
|
||||
while (eventType != XmlPullParser.START_TAG) {
|
||||
while (eventType != XmlPullParser.START_TAG &&
|
||||
eventType != XmlPullParser.END_DOCUMENT) {
|
||||
eventType = parser.next();
|
||||
}
|
||||
if (eventType == XmlPullParser.END_DOCUMENT) {
|
||||
return;
|
||||
}
|
||||
|
||||
String tagName = parser.getName();
|
||||
if ("usage-history".equals(tagName)) {
|
||||
String pkg = null;
|
||||
|
||||
@@ -1697,9 +1697,15 @@ public class SyncStorageEngine extends Handler {
|
||||
XmlPullParser parser = Xml.newPullParser();
|
||||
parser.setInput(fis, null);
|
||||
int eventType = parser.getEventType();
|
||||
while (eventType != XmlPullParser.START_TAG) {
|
||||
while (eventType != XmlPullParser.START_TAG &&
|
||||
eventType != XmlPullParser.END_DOCUMENT) {
|
||||
eventType = parser.next();
|
||||
}
|
||||
if (eventType == XmlPullParser.END_DOCUMENT) {
|
||||
Log.i(TAG, "No initial accounts");
|
||||
return;
|
||||
}
|
||||
|
||||
String tagName = parser.getName();
|
||||
if ("accounts".equals(tagName)) {
|
||||
String listen = parser.getAttributeValue(null, XML_ATTR_LISTEN_FOR_TICKLES);
|
||||
|
||||
Reference in New Issue
Block a user