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
This commit is contained in:
Bernie Innocenti
2018-06-14 17:55:58 +09:00
parent 9f2362bb82
commit dee4e0bde4
2 changed files with 9 additions and 3 deletions

View File

@@ -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];

View File

@@ -25,4 +25,7 @@ public final class HexDumpTest extends TestCase {
assertEquals("ABCDEF", HexDump.toHexString(
new byte[] { (byte) 0xab, (byte) 0xcd, (byte) 0xef }, true));
}
public void testNullArray() {
assertEquals("(null)", HexDump.toHexString(null));
}
}