From: Nick Burch Date: Sun, 28 Oct 2007 20:56:34 +0000 (+0000) Subject: Add in a (disabled) test for bug #43670 (not yet fixed) X-Git-Tag: REL_3_0_2_BETA1~18 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=067739ba0dba49039ab2eca0f284c743e3435ed2;p=poi.git Add in a (disabled) test for bug #43670 (not yet fixed) git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@589417 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkFactory.java b/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkFactory.java index f1f9edfc03..bb6f918d16 100644 --- a/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkFactory.java +++ b/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkFactory.java @@ -107,6 +107,12 @@ public class ChunkFactory { // Create the header ChunkHeader header = ChunkHeader.createChunkHeader(version, data, offset); + // Sanity check + if(header.length < 0) { + throw new IllegalArgumentException("Found a chunk with a negative length, which isn't allowed"); + } + + // How far up to look int endOfDataPos = offset + header.getLength() + header.getSizeInBytes(); // Check we have enough data, and tweak the header size diff --git a/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkHeader.java b/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkHeader.java index 86603a4b97..0d17669c28 100644 --- a/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkHeader.java +++ b/src/scratchpad/src/org/apache/poi/hdgf/chunks/ChunkHeader.java @@ -45,6 +45,7 @@ public abstract class ChunkHeader { ch.length = (int)LittleEndian.getUInt(data, offset + 12); ch.unknown2 = LittleEndian.getShort(data, offset + 16); ch.unknown3 = (short)LittleEndian.getUnsignedByte(data, offset + 18); + return ch; } else if(documentVersion == 5) { throw new RuntimeException("TODO"); diff --git a/src/scratchpad/testcases/org/apache/poi/hdgf/TestHDGFCore.java b/src/scratchpad/testcases/org/apache/poi/hdgf/TestHDGFCore.java index 70bf5fae06..85f64df220 100644 --- a/src/scratchpad/testcases/org/apache/poi/hdgf/TestHDGFCore.java +++ b/src/scratchpad/testcases/org/apache/poi/hdgf/TestHDGFCore.java @@ -25,11 +25,13 @@ import org.apache.poi.poifs.filesystem.POIFSFileSystem; import junit.framework.TestCase; public class TestHDGFCore extends TestCase { - POIFSFileSystem fs; + private POIFSFileSystem fs; + private String dirname; + private String filename; protected void setUp() throws Exception { - String dirname = System.getProperty("HDGF.testdata.path"); - String filename = dirname + "/Test_Visio-Some_Random_Text.vsd"; + dirname = System.getProperty("HDGF.testdata.path"); + filename = dirname + "/Test_Visio-Some_Random_Text.vsd"; fs = new POIFSFileSystem(new FileInputStream(filename)); } @@ -59,4 +61,16 @@ public class TestHDGFCore extends TestCase { assertNotNull(ps8.getPointedToStreams()); assertEquals(8, ps8.getPointedToStreams().length); } + + /** + * Tests that we can open a problematic file, that initially + * appears to have a negative chunk length + */ + public void DISABLEDtestNegativeChunkLength() throws Exception { + filename = dirname + "/NegativeChunkLength.vsd"; + fs = new POIFSFileSystem(new FileInputStream(filename)); + + HDGFDiagram hdgf = new HDGFDiagram(fs); + assertNotNull(hdgf); + } } diff --git a/src/scratchpad/testcases/org/apache/poi/hdgf/data/NegativeChunkLength.vsd b/src/scratchpad/testcases/org/apache/poi/hdgf/data/NegativeChunkLength.vsd new file mode 100644 index 0000000000..58378bdcc9 Binary files /dev/null and b/src/scratchpad/testcases/org/apache/poi/hdgf/data/NegativeChunkLength.vsd differ