From 18c0c31b65ba488c1087441cefb76090dfb26084 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Thu, 17 Apr 2014 10:34:25 +0200 Subject: work around for bug in xmlpullparser --- src/eu/siacs/conversations/xml/XmlReader.java | 46 +++++++++++++++------------ 1 file 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 { -- cgit v1.2.3