From 1f27ceb98fc896cbd5bf483126d72c399b06ac7a Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Sat, 28 Jun 2008 18:48:35 +0000 Subject: [PATCH] Patch from dnapoletano from bug #45175 - Support for variable length operands in org.apache.poi.hwpf.sprm.SprmOperation git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@672567 13f79535-47bb-0310-9956-ffa450edef68 --- src/documentation/content/xdocs/changes.xml | 1 + src/documentation/content/xdocs/status.xml | 1 + .../src/org/apache/poi/hwpf/sprm/SprmOperation.java | 9 ++++++++- .../TestMissingRecordAwareHSSFListener.java | 3 --- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/documentation/content/xdocs/changes.xml b/src/documentation/content/xdocs/changes.xml index d8e6c421d..825c99cc5 100644 --- a/src/documentation/content/xdocs/changes.xml +++ b/src/documentation/content/xdocs/changes.xml @@ -37,6 +37,7 @@ + 45175 - Support for variable length operands in org.apache.poi.hwpf.sprm.SprmOperation Avoid spurious missing lines with the MissingRecordAware event code, and odd files that contain RowRecords in the middle of the cell Records. Support for parsing formulas during EventUserModel processing, via the new EventWorkbookBuilder diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index 93a290c0b..cafa18cc5 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -34,6 +34,7 @@ + 45175 - Support for variable length operands in org.apache.poi.hwpf.sprm.SprmOperation Avoid spurious missing lines with the MissingRecordAware event code, and odd files that contain RowRecords in the middle of the cell Records. Support for parsing formulas during EventUserModel processing, via the new EventWorkbookBuilder diff --git a/src/scratchpad/src/org/apache/poi/hwpf/sprm/SprmOperation.java b/src/scratchpad/src/org/apache/poi/hwpf/sprm/SprmOperation.java index cacbbaaa3..764fc06c4 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/sprm/SprmOperation.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/sprm/SprmOperation.java @@ -101,7 +101,14 @@ public class SprmOperation case 3: return LittleEndian.getInt(_grpprl, _gOffset); case 6: - throw new UnsupportedOperationException("This SPRM contains a variable length operand"); + byte operandLength = _grpprl[_gOffset + 1]; //surely shorter than an int... + + byte [] codeBytes = new byte[LittleEndian.INT_SIZE]; //initialized to zeros by JVM + for(int i = 0; i < operandLength; i++) + if(_gOffset + i < _grpprl.length) + codeBytes[i] = _grpprl[_gOffset + 1 + i]; + + return LittleEndian.getInt(codeBytes, 0); case 7: byte threeByteInt[] = new byte[4]; threeByteInt[0] = _grpprl[_gOffset]; diff --git a/src/testcases/org/apache/poi/hssf/eventusermodel/TestMissingRecordAwareHSSFListener.java b/src/testcases/org/apache/poi/hssf/eventusermodel/TestMissingRecordAwareHSSFListener.java index bbad7b7f4..37e594940 100644 --- a/src/testcases/org/apache/poi/hssf/eventusermodel/TestMissingRecordAwareHSSFListener.java +++ b/src/testcases/org/apache/poi/hssf/eventusermodel/TestMissingRecordAwareHSSFListener.java @@ -353,9 +353,6 @@ public final class TestMissingRecordAwareHSSFListener extends TestCase { public void testNoExtraNewLines() throws Exception { // Load a different file openAlt(); - for(int i=0; i