diff options
author | Daniel Gultsch <daniel.gultsch@rwth-aachen.de> | 2014-04-17 10:34:25 +0200 |
---|---|---|
committer | Andreas Straub <andy@strb.org> | 2014-04-18 00:33:00 +0200 |
commit | 18c0c31b65ba488c1087441cefb76090dfb26084 (patch) | |
tree | 55c47a893e4fa8ac27381f61821b9cf82c873877 /src/eu/siacs | |
parent | cc977eee9094b4c006fc56d87772a11c7ac11a08 (diff) |
work around for bug in xmlpullparser
Diffstat (limited to 'src/eu/siacs')
-rw-r--r-- | src/eu/siacs/conversations/xml/XmlReader.java | 46 |
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 { |