From 2ddce3226e2a1f380dfc4ad3f7e962dfdbfc39dd Mon Sep 17 00:00:00 2001 From: Vladimir Marko Date: Mon, 1 Jul 2013 14:43:55 +0100 Subject: [PATCH] Handle missing and invalid numeric values in XmlUtils. Convert these errors to XmlPullParserException. Bug: 8584433 Change-Id: I070ed517682e7f047ec00271db26110da2bebb09 --- .../com/android/internal/util/XmlUtils.java | 37 ++++++++++++++----- 1 file changed, 27 insertions(+), 10 deletions(-) diff --git a/core/java/com/android/internal/util/XmlUtils.java b/core/java/com/android/internal/util/XmlUtils.java index 6a09fe07f8437..1005cc451b8bf 100644 --- a/core/java/com/android/internal/util/XmlUtils.java +++ b/core/java/com/android/internal/util/XmlUtils.java @@ -800,16 +800,8 @@ public class XmlUtils } throw new XmlPullParserException( "Unexpected end of document in "); - } else if (tagName.equals("int")) { - res = Integer.parseInt(parser.getAttributeValue(null, "value")); - } else if (tagName.equals("long")) { - res = Long.valueOf(parser.getAttributeValue(null, "value")); - } else if (tagName.equals("float")) { - res = new Float(parser.getAttributeValue(null, "value")); - } else if (tagName.equals("double")) { - res = new Double(parser.getAttributeValue(null, "value")); - } else if (tagName.equals("boolean")) { - res = Boolean.valueOf(parser.getAttributeValue(null, "value")); + } else if ((res = readThisPrimitiveValueXml(parser, tagName)) != null) { + // all work already done by readThisPrimitiveValueXml } else if (tagName.equals("int-array")) { parser.next(); res = readThisIntArrayXml(parser, "int-array", name); @@ -862,6 +854,31 @@ public class XmlUtils "Unexpected end of document in <" + tagName + ">"); } + private static final Object readThisPrimitiveValueXml(XmlPullParser parser, String tagName) + throws XmlPullParserException, java.io.IOException + { + try { + if (tagName.equals("int")) { + return Integer.parseInt(parser.getAttributeValue(null, "value")); + } else if (tagName.equals("long")) { + return Long.valueOf(parser.getAttributeValue(null, "value")); + } else if (tagName.equals("float")) { + return new Float(parser.getAttributeValue(null, "value")); + } else if (tagName.equals("double")) { + return new Double(parser.getAttributeValue(null, "value")); + } else if (tagName.equals("boolean")) { + return Boolean.valueOf(parser.getAttributeValue(null, "value")); + } else { + return null; + } + } catch (NullPointerException e) { + throw new XmlPullParserException("Need value attribute in <" + tagName + ">"); + } catch (NumberFormatException e) { + throw new XmlPullParserException( + "Not a number in value attribute in <" + tagName + ">"); + } + } + public static final void beginDocument(XmlPullParser parser, String firstElementName) throws XmlPullParserException, IOException { int type;