From aeb0d6abe38f77e112494358ffeee01b47646a21 Mon Sep 17 00:00:00 2001 From: Dominik Stadler Date: Thu, 16 Jul 2015 03:49:44 +0000 Subject: [PATCH] Fixup printing record name in case of unknown sid git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1691312 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/poi/hssf/record/RecordInputStream.java | 10 +++++++++- .../apache/poi/hssf/record/TestRecordInputStream.java | 8 ++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/java/org/apache/poi/hssf/record/RecordInputStream.java b/src/java/org/apache/poi/hssf/record/RecordInputStream.java index 831a3a187..9de7d6889 100644 --- a/src/java/org/apache/poi/hssf/record/RecordInputStream.java +++ b/src/java/org/apache/poi/hssf/record/RecordInputStream.java @@ -52,9 +52,17 @@ public final class RecordInputStream implements LittleEndianInput { public static final class LeftoverDataException extends RuntimeException { public LeftoverDataException(int sid, int remainingByteCount) { super("Initialisation of record 0x" + Integer.toHexString(sid).toUpperCase() - + "(" + RecordFactory.getRecordClass(sid).getSimpleName() + ") left " + remainingByteCount + + "(" + getRecordName(sid) + ") left " + remainingByteCount + " bytes remaining still to be read."); } + + private static String getRecordName(int sid) { + Class recordClass = RecordFactory.getRecordClass(sid); + if(recordClass == null) { + return null; + } + return recordClass.getSimpleName(); + } } /** Header {@link LittleEndianInput} facet of the wrapped {@link InputStream} */ diff --git a/src/testcases/org/apache/poi/hssf/record/TestRecordInputStream.java b/src/testcases/org/apache/poi/hssf/record/TestRecordInputStream.java index 2b236e1ac..518c5f047 100644 --- a/src/testcases/org/apache/poi/hssf/record/TestRecordInputStream.java +++ b/src/testcases/org/apache/poi/hssf/record/TestRecordInputStream.java @@ -94,4 +94,12 @@ public final class TestRecordInputStream extends TestCase { String actual = in.readString(); assertEquals("Multilingual - \u591A\u8A00\u8A9E", actual); } + + public void testLeftoverDataException() { + // just ensure that the exception is created correctly, even with unknown sids + new RecordInputStream.LeftoverDataException(1, 200); + new RecordInputStream.LeftoverDataException(0, 200); + new RecordInputStream.LeftoverDataException(999999999, 200); + new RecordInputStream.LeftoverDataException(HeaderRecord.sid, 200); + } }