Merge branch 'master' into development

Daniel Gultsch created

Change summary

src/eu/siacs/conversations/xml/XmlReader.java | 46 +++++++++++---------
1 file changed, 25 insertions(+), 21 deletions(-)

Detailed changes

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 {