From 05c7c16308faab454b08f838f951f08b6460259a Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Sun, 9 Jul 2017 16:26:33 +0000 Subject: [PATCH] #61266 Test for old unsupported MS Write WRI files, and give a more helpful exception if found, plus unit tests git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1801376 13f79535-47bb-0310-9956-ffa450edef68 --- .../org/apache/poi/TestAllFiles.java | 1 + .../apache/poi/poifs/storage/HeaderBlock.java | 13 +++ .../filesystem/AllPOIFSFileSystemTests.java | 1 + .../filesystem/TestNotOLE2Exception.java | 95 ++++++++++++++++++ .../filesystem/TestOfficeXMLException.java | 8 ++ test-data/document/MSWriteOld.wri | Bin 0 -> 74752 bytes 6 files changed, 118 insertions(+) create mode 100644 src/testcases/org/apache/poi/poifs/filesystem/TestNotOLE2Exception.java create mode 100644 test-data/document/MSWriteOld.wri diff --git a/src/integrationtest/org/apache/poi/TestAllFiles.java b/src/integrationtest/org/apache/poi/TestAllFiles.java index 3f0d51020..9a9ba8864 100644 --- a/src/integrationtest/org/apache/poi/TestAllFiles.java +++ b/src/integrationtest/org/apache/poi/TestAllFiles.java @@ -156,6 +156,7 @@ public class TestAllFiles { HANDLERS.put(".dat", new HMEFFileHandler()); // TODO: are these readable by some of the formats? + HANDLERS.put(".wri", new NullFileHandler()); HANDLERS.put(".shw", new NullFileHandler()); HANDLERS.put(".zvi", new NullFileHandler()); HANDLERS.put(".mpp", new NullFileHandler()); diff --git a/src/java/org/apache/poi/poifs/storage/HeaderBlock.java b/src/java/org/apache/poi/poifs/storage/HeaderBlock.java index aced76bbe..fe64f61c8 100644 --- a/src/java/org/apache/poi/poifs/storage/HeaderBlock.java +++ b/src/java/org/apache/poi/poifs/storage/HeaderBlock.java @@ -67,6 +67,13 @@ public final class HeaderBlock implements HeaderBlockConstants { 0x00, 0x00, // unused 0x00, 0x01 }; + + private static final byte[] MAGIC_MSWRITEa = { + 0x31, (byte)0xbe, 0x00, 0x00 + }; + private static final byte[] MAGIC_MSWRITEb = { + 0x32, (byte)0xbe, 0x00, 0x00 + }; private static final byte _default_value = ( byte ) 0xFF; @@ -159,6 +166,12 @@ public final class HeaderBlock implements HeaderBlockConstants { + "Formats such as Office 2003 XML are not supported"); } + // Old MS Write raw stream + if (cmp(MAGIC_MSWRITEa, data) || cmp(MAGIC_MSWRITEb, data)) { + throw new NotOLE2FileException("The supplied data appears to be in the old MS Write format. " + + "Apache POI doesn't currently support this format"); + } + // BIFF2 raw stream if (cmp(MAGIC_BIFF2, data)) { throw new OldExcelFormatException("The supplied data appears to be in BIFF2 format. " diff --git a/src/testcases/org/apache/poi/poifs/filesystem/AllPOIFSFileSystemTests.java b/src/testcases/org/apache/poi/poifs/filesystem/AllPOIFSFileSystemTests.java index 999f2de1b..e4dfd71ef 100644 --- a/src/testcases/org/apache/poi/poifs/filesystem/AllPOIFSFileSystemTests.java +++ b/src/testcases/org/apache/poi/poifs/filesystem/AllPOIFSFileSystemTests.java @@ -32,6 +32,7 @@ import org.junit.runners.Suite; , TestDocumentNode.class , TestDocumentOutputStream.class , TestEmptyDocument.class + , TestNotOLE2Exception.class , TestOfficeXMLException.class , TestPOIFSDocumentPath.class , TestPOIFSFileSystem.class diff --git a/src/testcases/org/apache/poi/poifs/filesystem/TestNotOLE2Exception.java b/src/testcases/org/apache/poi/poifs/filesystem/TestNotOLE2Exception.java new file mode 100644 index 000000000..cb156728e --- /dev/null +++ b/src/testcases/org/apache/poi/poifs/filesystem/TestNotOLE2Exception.java @@ -0,0 +1,95 @@ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + +package org.apache.poi.poifs.filesystem; + +import static org.apache.poi.POITestCase.assertContains; + +import java.io.IOException; +import java.io.InputStream; + +import junit.framework.TestCase; + +import org.apache.poi.POIDataSamples; +import org.apache.poi.hssf.HSSFTestDataSamples; +import org.apache.poi.hssf.OldExcelFormatException; + +/** + * Class to test that POIFS complains when given older non-OLE2 + * formats. See also {@link TestOfficeXMLException} for OOXML + * checks + */ +public class TestNotOLE2Exception extends TestCase { + private static final InputStream openXLSSampleStream(String sampleFileName) { + return HSSFTestDataSamples.openSampleFileStream(sampleFileName); + } + private static final InputStream openDOCSampleStream(String sampleFileName) { + return POIDataSamples.getDocumentInstance().openResourceAsStream(sampleFileName); + } + + public void testRawXMLException() throws IOException { + InputStream in = openXLSSampleStream("SampleSS.xml"); + + try { + new POIFSFileSystem(in).close(); + fail("expected exception was not thrown"); + } catch(NotOLE2FileException e) { + // expected during successful test + assertContains(e.getMessage(), "The supplied data appears to be a raw XML file"); + assertContains(e.getMessage(), "Formats such as Office 2003 XML"); + } + } + + public void testMSWriteException() throws IOException { + InputStream in = openDOCSampleStream("MSWriteOld.wri"); + + try { + new POIFSFileSystem(in).close(); + fail("expected exception was not thrown"); + } catch(NotOLE2FileException e) { + // expected during successful test + assertContains(e.getMessage(), "The supplied data appears to be in the old MS Write"); + assertContains(e.getMessage(), "doesn't currently support"); + } + } + + public void testBiff3Exception() throws IOException { + InputStream in = openXLSSampleStream("testEXCEL_3.xls"); + + try { + new POIFSFileSystem(in).close(); + fail("expected exception was not thrown"); + } catch(OldExcelFormatException e) { + // expected during successful test + assertContains(e.getMessage(), "The supplied data appears to be in BIFF3 format"); + assertContains(e.getMessage(), "try OldExcelExtractor"); + } + } + + public void testBiff4Exception() throws IOException { + InputStream in = openXLSSampleStream("testEXCEL_4.xls"); + + try { + new POIFSFileSystem(in).close(); + fail("expected exception was not thrown"); + } catch(OldExcelFormatException e) { + // expected during successful test + assertContains(e.getMessage(), "The supplied data appears to be in BIFF4 format"); + assertContains(e.getMessage(), "try OldExcelExtractor"); + } + } +} diff --git a/src/testcases/org/apache/poi/poifs/filesystem/TestOfficeXMLException.java b/src/testcases/org/apache/poi/poifs/filesystem/TestOfficeXMLException.java index 9e5e0e1be..775760aab 100644 --- a/src/testcases/org/apache/poi/poifs/filesystem/TestOfficeXMLException.java +++ b/src/testcases/org/apache/poi/poifs/filesystem/TestOfficeXMLException.java @@ -75,6 +75,14 @@ public class TestOfficeXMLException extends TestCase { // xls file is confirmIsPOIFS("SampleSS.xls", true); + // older biff formats aren't + confirmIsPOIFS("testEXCEL_3.xls", false); + confirmIsPOIFS("testEXCEL_4.xls", false); + + // newer excel formats are + confirmIsPOIFS("testEXCEL_5.xls", true); + confirmIsPOIFS("testEXCEL_95.xls", true); + // text file isn't confirmIsPOIFS("SampleSS.txt", false); } diff --git a/test-data/document/MSWriteOld.wri b/test-data/document/MSWriteOld.wri new file mode 100644 index 0000000000000000000000000000000000000000..9391077cec4d5f1c2d62de6bcf8b80ede8cc97da GIT binary patch literal 74752 zcmeIb4V+xpRVR4$VOgb*ah#YC2;;nnkhFrjrB+L_EXz(>t+v#t^?|BoM~Q<|-Cf

)2huu5M)tTj1ZD|!r>XoJHY;vx;biLWS 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 literal 0 HcmV?d00001