From dee4e0bde42889589a88e578e3ab3e8d45026823 Mon Sep 17 00:00:00 2001 From: Bernie Innocenti Date: Thu, 14 Jun 2018 17:55:58 +0900 Subject: [PATCH] Make dumpHexString() tolerate null arrays. Rationale: hexdumps are mainly used when verbose logging is enabled, which means that callers are rarely exercised (let alone tested). Crashing on unchecked null pointers doesn't make debugging any easier, nor production code any more robust. Moreover, this is the behavior of system.out.println() and other logging APIs. Test: runtest -x core/tests/coretests/src/com/android/internal/util/HexDumpTest.java Bug: 110177912 Change-Id: Idccd81a5654ed0f7fee6b27177941bf8c311973e --- core/java/com/android/internal/util/HexDump.java | 9 ++++++--- .../src/com/android/internal/util/HexDumpTest.java | 3 +++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/core/java/com/android/internal/util/HexDump.java b/core/java/com/android/internal/util/HexDump.java index 7be95d89dcf9a..af004009e1ee7 100644 --- a/core/java/com/android/internal/util/HexDump.java +++ b/core/java/com/android/internal/util/HexDump.java @@ -16,18 +16,21 @@ package com.android.internal.util; +import android.annotation.Nullable; + public class HexDump { private final static char[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' }; private final static char[] HEX_LOWER_CASE_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; - public static String dumpHexString(byte[] array) - { + public static String dumpHexString(@Nullable byte[] array) { + if (array == null) return "(null)"; return dumpHexString(array, 0, array.length); } - public static String dumpHexString(byte[] array, int offset, int length) + public static String dumpHexString(@Nullable byte[] array, int offset, int length) { + if (array == null) return "(null)"; StringBuilder result = new StringBuilder(); byte[] line = new byte[16]; diff --git a/core/tests/coretests/src/com/android/internal/util/HexDumpTest.java b/core/tests/coretests/src/com/android/internal/util/HexDumpTest.java index 951e87a99da3c..359bd5e93daeb 100644 --- a/core/tests/coretests/src/com/android/internal/util/HexDumpTest.java +++ b/core/tests/coretests/src/com/android/internal/util/HexDumpTest.java @@ -25,4 +25,7 @@ public void testBytesToHexString() { assertEquals("ABCDEF", HexDump.toHexString( new byte[] { (byte) 0xab, (byte) 0xcd, (byte) 0xef }, true)); } + public void testNullArray() { + assertEquals("(null)", HexDump.toHexString(null)); + } }