diff options
author | 2017-04-18 23:32:02 +0000 | |
---|---|---|
committer | 2017-04-18 23:32:09 +0000 | |
commit | ddf1d16504d60be6deb8d130e920b0709aa331b5 (patch) | |
tree | 74ea26f22d21f462a50d410f04da31158fe12c5f | |
parent | 944782fac265834242db046a255364ca7dedfd5e (diff) | |
parent | 572c5df5783bfbe2828180fcbabd97bea4c9188e (diff) |
Merge "guard against nulls in LogMaker" into oc-dev
-rw-r--r-- | core/java/android/metrics/LogMaker.java | 10 | ||||
-rw-r--r-- | core/tests/coretests/src/android/metrics/LogMakerTest.java | 28 |
2 files changed, 35 insertions, 3 deletions
diff --git a/core/java/android/metrics/LogMaker.java b/core/java/android/metrics/LogMaker.java index a76a8a0e3da2..3c6baa76558a 100644 --- a/core/java/android/metrics/LogMaker.java +++ b/core/java/android/metrics/LogMaker.java @@ -54,7 +54,11 @@ public class LogMaker { /* Deserialize from the eventlog */ public LogMaker(Object[] items) { - deserialize(items); + if (items != null) { + deserialize(items); + } else { + setCategory(MetricsEvent.VIEW_UNKNOWN); + } } /** @param category to replace the existing setting. */ @@ -373,13 +377,13 @@ public class LogMaker { */ public void deserialize(Object[] items) { int i = 0; - while (i < items.length) { + while (items != null && i < items.length) { Object key = items[i++]; Object value = i < items.length ? items[i++] : null; if (key instanceof Integer) { entries.put((Integer) key, value); } else { - Log.i(TAG, "Invalid key " + key.toString()); + Log.i(TAG, "Invalid key " + (key == null ? "null" : key.toString())); } } } diff --git a/core/tests/coretests/src/android/metrics/LogMakerTest.java b/core/tests/coretests/src/android/metrics/LogMakerTest.java index bab9f631d7d4..63c1f87178aa 100644 --- a/core/tests/coretests/src/android/metrics/LogMakerTest.java +++ b/core/tests/coretests/src/android/metrics/LogMakerTest.java @@ -263,4 +263,32 @@ public class LogMakerTest extends TestCase { assertFalse(a.isSubsetOf(b)); assertFalse(b.isSubsetOf(a)); } + + public void testConstructFromNull() { + new LogMaker(null); + // no promises, just don't throw + } + + public void testConstructFromNullKey() { + Object[] items = new Object[2]; + items[0] = null; + items[1] = "foo"; + new LogMaker(items); + // no promises, just don't throw + } + + public void testConstructFromNullField() { + Object[] items = new Object[2]; + items[0] = 10; + items[1] = null; + new LogMaker(items); + // no promises, just don't throw + } + + public void testConstructFromTruncatedArray() { + Object[] items = new Object[1]; + items[0] = 10; + new LogMaker(items); + // no promises, just don't throw + } } |