diff options
author | Narayan Kamath <narayan@google.com> | 2014-01-07 02:05:39 -0800 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2014-01-07 02:05:39 -0800 |
commit | 9d4ebdcafaa6a3f29978a7095f2bc3cbe0d5240a (patch) | |
tree | f71397a99788a88b72040103174692318146aa11 | |
parent | c9e27802f049b9c3086770a7710b421ce33d2791 (diff) | |
parent | cf1aa551eed7be4310a386b9b9e458e46847207a (diff) | |
download | frameworks_base-9d4ebdcafaa6a3f29978a7095f2bc3cbe0d5240a.zip frameworks_base-9d4ebdcafaa6a3f29978a7095f2bc3cbe0d5240a.tar.gz frameworks_base-9d4ebdcafaa6a3f29978a7095f2bc3cbe0d5240a.tar.bz2 |
am cf1aa551: Merge "XmlUtils#readThisMapXml should handle null keys."
* commit 'cf1aa551eed7be4310a386b9b9e458e46847207a':
XmlUtils#readThisMapXml should handle null keys.
-rw-r--r-- | core/java/com/android/internal/util/XmlUtils.java | 19 | ||||
-rw-r--r-- | core/tests/coretests/src/com/android/internal/util/XmlUtilsTest.java | 41 |
2 files changed, 48 insertions, 12 deletions
diff --git a/core/java/com/android/internal/util/XmlUtils.java b/core/java/com/android/internal/util/XmlUtils.java index 0b74cf3..b35de93 100644 --- a/core/java/com/android/internal/util/XmlUtils.java +++ b/core/java/com/android/internal/util/XmlUtils.java @@ -482,12 +482,13 @@ public class XmlUtils { * @see #readThisMapXml * #see #writeMapXml */ - public static final HashMap readMapXml(InputStream in) + @SuppressWarnings("unchecked") + public static final HashMap<String, ?> readMapXml(InputStream in) throws XmlPullParserException, java.io.IOException { XmlPullParser parser = Xml.newPullParser(); parser.setInput(in, null); - return (HashMap)readValueXml(parser, new String[1]); + return (HashMap<String, ?>) readValueXml(parser, new String[1]); } /** @@ -548,22 +549,16 @@ public class XmlUtils { * * @see #readMapXml */ - public static final HashMap readThisMapXml(XmlPullParser parser, String endTag, String[] name) - throws XmlPullParserException, java.io.IOException + public static final HashMap<String, ?> readThisMapXml(XmlPullParser parser, String endTag, + String[] name) throws XmlPullParserException, java.io.IOException { - HashMap map = new HashMap(); + HashMap<String, Object> map = new HashMap<String, Object>(); int eventType = parser.getEventType(); do { if (eventType == parser.START_TAG) { Object val = readThisValueXml(parser, name); - if (name[0] != null) { - //System.out.println("Adding to map: " + name + " -> " + val); - map.put(name[0], val); - } else { - throw new XmlPullParserException( - "Map value without name attribute: " + parser.getName()); - } + map.put(name[0], val); } else if (eventType == parser.END_TAG) { if (parser.getName().equals(endTag)) { return map; diff --git a/core/tests/coretests/src/com/android/internal/util/XmlUtilsTest.java b/core/tests/coretests/src/com/android/internal/util/XmlUtilsTest.java new file mode 100644 index 0000000..2596ece --- /dev/null +++ b/core/tests/coretests/src/com/android/internal/util/XmlUtilsTest.java @@ -0,0 +1,41 @@ +/** + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.util; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Map; +import junit.framework.TestCase; + +public class XmlUtilsTest extends TestCase { + + // https://code.google.com/p/android/issues/detail?id=63717 + public void testMapWithNullKeys() throws Exception { + ByteArrayOutputStream baos = new ByteArrayOutputStream(1024); + Map<String, Object> map = new HashMap<String, Object>(); + map.put(null, "nullValue"); + map.put("foo", "fooValue"); + XmlUtils.writeMapXml(map, baos); + + InputStream mapInput = new ByteArrayInputStream(baos.toByteArray()); + HashMap<String, ?> deserialized = XmlUtils.readMapXml(mapInput); + assertEquals("nullValue", deserialized.get(null)); + assertEquals("fooValue", deserialized.get("foo")); + } +} |