aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Gultsch <daniel.gultsch@rwth-aachen.de>2014-04-17 10:34:25 +0200
committerAndreas Straub <andy@strb.org>2014-04-18 00:33:00 +0200
commit18c0c31b65ba488c1087441cefb76090dfb26084 (patch)
tree55c47a893e4fa8ac27381f61821b9cf82c873877
parentcc977eee9094b4c006fc56d87772a11c7ac11a08 (diff)
work around for bug in xmlpullparser
-rw-r--r--src/eu/siacs/conversations/xml/XmlReader.java46
1 files changed, 25 insertions, 21 deletions
diff --git a/src/eu/siacs/conversations/xml/XmlReader.java b/src/eu/siacs/conversations/xml/XmlReader.java
index 71e86cf9..0a82a5d8 100644
--- a/src/eu/siacs/conversations/xml/XmlReader.java
+++ b/src/eu/siacs/conversations/xml/XmlReader.java
@@ -51,32 +51,36 @@ public class XmlReader {
public Tag readTag() throws XmlPullParserException, IOException {
if (wakeLock.isHeld()) {
- wakeLock.release(); //release wake look while waiting on next parser event
+ wakeLock.release();
}
- while(parser.next() != XmlPullParser.END_DOCUMENT) {
- wakeLock.acquire();
- if (parser.getEventType() == XmlPullParser.START_TAG) {
- Tag tag = Tag.start(parser.getName());
- for(int i = 0; i < parser.getAttributeCount(); ++i) {
- tag.setAttribute(parser.getAttributeName(i), parser.getAttributeValue(i));
- }
- String xmlns = parser.getNamespace();
- if (xmlns!=null) {
- tag.setAttribute("xmlns",xmlns);
+ try {
+ while(parser.next() != XmlPullParser.END_DOCUMENT) {
+ wakeLock.acquire();
+ if (parser.getEventType() == XmlPullParser.START_TAG) {
+ Tag tag = Tag.start(parser.getName());
+ for(int i = 0; i < parser.getAttributeCount(); ++i) {
+ tag.setAttribute(parser.getAttributeName(i), parser.getAttributeValue(i));
+ }
+ String xmlns = parser.getNamespace();
+ if (xmlns!=null) {
+ tag.setAttribute("xmlns",xmlns);
+ }
+ return tag;
+ } else if (parser.getEventType() == XmlPullParser.END_TAG) {
+ Tag tag = Tag.end(parser.getName());
+ return tag;
+ } else if (parser.getEventType() == XmlPullParser.TEXT) {
+ Tag tag = Tag.no(parser.getText());
+ return tag;
}
- return tag;
- } else if (parser.getEventType() == XmlPullParser.END_TAG) {
- Tag tag = Tag.end(parser.getName());
- return tag;
- } else if (parser.getEventType() == XmlPullParser.TEXT) {
- Tag tag = Tag.no(parser.getText());
- return tag;
}
+ if (wakeLock.isHeld()) {
+ wakeLock.release();
}
- if (wakeLock.isHeld()) {
- wakeLock.release();
+ } catch (ArrayIndexOutOfBoundsException e) {
+ throw new IOException("xml parser mishandled ArrayIndexOufOfBounds", e);
}
- return null; //end document;
+ return null;
}
public Element readElement(Tag currentTag) throws XmlPullParserException, IOException {