Author: nick
Date: Wed Mar 9 10:57:52 2016
New Revision: 1734215
URL: http://svn.apache.org/viewvc?rev=1734215&view=rev
Log:
More helpful exception message if POIFS is given a raw XML file (eg an Office
2003 XML file), plus tests
Added:
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestOfficeXMLException.java
- copied, changed from r1734214,
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestOffice2007XMLException.java
poi/trunk/test-data/spreadsheet/SampleSS.xml
Removed:
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestOffice2007XMLException.java
Modified:
poi/trunk/src/java/org/apache/poi/poifs/common/POIFSConstants.java
poi/trunk/src/java/org/apache/poi/poifs/storage/HeaderBlock.java
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/AllPOIFSFileSystemTests.java
Modified: poi/trunk/src/java/org/apache/poi/poifs/common/POIFSConstants.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/common/POIFSConstants.java?rev=1734215&r1=1734214&r2=1734215&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/common/POIFSConstants.java
(original)
+++ poi/trunk/src/java/org/apache/poi/poifs/common/POIFSConstants.java Wed Mar
9 10:57:52 2016
@@ -61,4 +61,7 @@ public interface POIFSConstants
/** The first 4 bytes of an OOXML file, used in detection */
public static final byte[] OOXML_FILE_HEADER =
new byte[] { 0x50, 0x4b, 0x03, 0x04 };
+ /** The first 5 bytes of a raw XML file, used in detection */
+ public static final byte[] RAW_XML_FILE_HEADER =
+ new byte[] { 0x3c, 0x3f, 0x78, 0x6d, 0x6c };
} // end public interface POIFSConstants;
Modified: poi/trunk/src/java/org/apache/poi/poifs/storage/HeaderBlock.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/storage/HeaderBlock.java?rev=1734215&r1=1734214&r2=1734215&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/storage/HeaderBlock.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/storage/HeaderBlock.java Wed Mar 9
10:57:52 2016
@@ -128,6 +128,15 @@ public final class HeaderBlock implement
throw new OfficeXmlFileException("The supplied
data appears to be in the Office 2007+ XML. You are calling the part of POI
that deals with OLE2 Office Documents. You need to call a different part of POI
to process this data (eg XSSF instead of HSSF)");
}
+ byte[] RAW_XML_FILE_HEADER = POIFSConstants.RAW_XML_FILE_HEADER;
+ if (_data[0] == RAW_XML_FILE_HEADER[0] &&
+ _data[1] == RAW_XML_FILE_HEADER[1] &&
+ _data[2] == RAW_XML_FILE_HEADER[2] &&
+ _data[3] == RAW_XML_FILE_HEADER[3] &&
+ _data[4] == RAW_XML_FILE_HEADER[4]) {
+ throw new NotOLE2FileException("The supplied data appears to
be a raw XML file. Formats such as Office 2003 XML are not supported");
+ }
+
if (_data[0] == 0x09 && _data[1] == 0x00 && // sid=0x0009
_data[2] == 0x04 && _data[3] == 0x00 && // size=0x0004
_data[4] == 0x00 && _data[5] == 0x00 && // unused
Modified:
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/AllPOIFSFileSystemTests.java
URL:
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/AllPOIFSFileSystemTests.java?rev=1734215&r1=1734214&r2=1734215&view=diff
==============================================================================
---
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/AllPOIFSFileSystemTests.java
(original)
+++
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/AllPOIFSFileSystemTests.java
Wed Mar 9 10:57:52 2016
@@ -32,7 +32,7 @@ import org.junit.runners.Suite;
, TestDocumentNode.class
, TestDocumentOutputStream.class
, TestEmptyDocument.class
- , TestOffice2007XMLException.class
+ , TestOfficeXMLException.class
, TestPOIFSDocumentPath.class
, TestPOIFSFileSystem.class
, TestNPOIFSFileSystem.class
Copied:
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestOfficeXMLException.java
(from r1734214,
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestOffice2007XMLException.java)
URL:
http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestOfficeXMLException.java?p2=poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestOfficeXMLException.java&p1=poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestOffice2007XMLException.java&r1=1734214&r2=1734215&rev=1734215&view=diff
==============================================================================
---
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestOffice2007XMLException.java
(original)
+++
poi/trunk/src/testcases/org/apache/poi/poifs/filesystem/TestOfficeXMLException.java
Wed Mar 9 10:57:52 2016
@@ -28,16 +28,15 @@ import org.apache.poi.hssf.HSSFTestDataS
import junit.framework.TestCase;
/**
- * Class to test that POIFS complains when given an Office 2007 XML document
- *
- * @author Marc Johnson
+ * Class to test that POIFS complains when given an Office 2003 XML
+ * of Office Open XML (OOXML, 2007+) document
*/
-public class TestOffice2007XMLException extends TestCase {
+public class TestOfficeXMLException extends TestCase {
private static final InputStream openSampleStream(String
sampleFileName) {
return HSSFTestDataSamples.openSampleFileStream(sampleFileName);
}
- public void testXMLException() throws IOException
+ public void testOOXMLException() throws IOException
{
InputStream in = openSampleStream("sample.xlsx");
@@ -50,12 +49,27 @@ public class TestOffice2007XMLException
assertTrue(e.getMessage().indexOf("You are calling the
part of POI that deals with OLE2 Office Documents") > -1);
}
}
+ public void test2003XMLException() throws IOException
+ {
+ InputStream in = openSampleStream("SampleSS.xml");
+
+ try {
+ new POIFSFileSystem(in).close();
+ fail("expected exception was not thrown");
+ } catch(NotOLE2FileException e) {
+ // expected during successful test
+ assertTrue(e.getMessage().indexOf("The supplied data appears to be
a raw XML file") > -1);
+ assertTrue(e.getMessage().indexOf("Formats such as Office 2003
XML") > -1);
+ }
+ }
public void testDetectAsPOIFS() throws IOException {
-
// ooxml file isn't
confirmIsPOIFS("SampleSS.xlsx", false);
+ // 2003 xml file isn't
+ confirmIsPOIFS("SampleSS.xml", false);
+
// xls file is
confirmIsPOIFS("SampleSS.xls", true);
Added: poi/trunk/test-data/spreadsheet/SampleSS.xml
URL:
http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/SampleSS.xml?rev=1734215&view=auto
==============================================================================
--- poi/trunk/test-data/spreadsheet/SampleSS.xml (added)
+++ poi/trunk/test-data/spreadsheet/SampleSS.xml Wed Mar 9 10:57:52 2016
@@ -0,0 +1,142 @@
+<?xml version="1.0"?>
+<?mso-application progid="Excel.Sheet"?>
+<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
+ xmlns:o="urn:schemas-microsoft-com:office:office"
+ xmlns:x="urn:schemas-microsoft-com:office:excel"
+ xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
+ xmlns:html="http://www.w3.org/TR/REC-html40">
+ <DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
+ <Title>Sample Spreadsheet</Title>
+ <Subject>Spreadsheet for testing</Subject>
+ <Author>Nick Burch</Author>
+ <Keywords>Testing Sample Formulas</Keywords>
+ <Description>This is a sample spreadsheet, for use when testing
things</Description>
+ <LastAuthor>Nick Burch</LastAuthor>
+ <Created>2008-01-04T11:51:36Z</Created>
+ <LastSaved>2008-01-04T11:56:04Z</LastSaved>
+ <Version>14.00</Version>
+ </DocumentProperties>
+ <OfficeDocumentSettings xmlns="urn:schemas-microsoft-com:office:office">
+ <AllowPNG/>
+ </OfficeDocumentSettings>
+ <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
+ <WindowHeight>5580</WindowHeight>
+ <WindowWidth>11295</WindowWidth>
+ <WindowTopX>360</WindowTopX>
+ <WindowTopY>60</WindowTopY>
+ <ActiveSheet>1</ActiveSheet>
+ <ProtectStructure>False</ProtectStructure>
+ <ProtectWindows>False</ProtectWindows>
+ </ExcelWorkbook>
+ <Styles>
+ <Style ss:ID="Default" ss:Name="Normal">
+ <Alignment ss:Vertical="Bottom"/>
+ <Borders/>
+ <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11"
ss:Color="#000000"/>
+ <Interior/>
+ <NumberFormat/>
+ <Protection/>
+ </Style>
+ <Style ss:ID="s62">
+ <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11"
ss:Color="#FF0000"/>
+ </Style>
+ <Style ss:ID="s63">
+ <Font ss:FontName="Calibri" x:Family="Swiss" ss:Size="11" ss:Color="#1F497D"
+ ss:Bold="1"/>
+ <Interior ss:Color="#FFFF00" ss:Pattern="Solid"/>
+ </Style>
+ </Styles>
+ <Worksheet ss:Name="First Sheet">
+ <Table ss:ExpandedColumnCount="2" ss:ExpandedRowCount="4" x:FullColumns="1"
+ x:FullRows="1" ss:DefaultRowHeight="15">
+ <Row>
+ <Cell><Data ss:Type="String">Test spreadsheet</Data></Cell>
+ </Row>
+ <Row>
+ <Cell><Data ss:Type="String">2nd row</Data></Cell>
+ <Cell><Data ss:Type="String">2nd row 2nd column</Data></Cell>
+ </Row>
+ <Row ss:Index="4">
+ <Cell ss:StyleID="s62"><Data ss:Type="String">This one is red</Data></Cell>
+ </Row>
+ </Table>
+ <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
+ <PageSetup>
+ <Header x:Margin="0.3"/>
+ <Footer x:Margin="0.3"/>
+ <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
+ </PageSetup>
+ <Print>
+ <ValidPrinterInfo/>
+ <PaperSizeIndex>0</PaperSizeIndex>
+ <VerticalResolution>0</VerticalResolution>
+ <NumberofCopies>0</NumberofCopies>
+ </Print>
+ <Panes>
+ <Pane>
+ <Number>3</Number>
+ <RangeSelection>R1C1:R4C2</RangeSelection>
+ </Pane>
+ </Panes>
+ <ProtectObjects>False</ProtectObjects>
+ <ProtectScenarios>False</ProtectScenarios>
+ </WorksheetOptions>
+ </Worksheet>
+ <Worksheet ss:Name="Sheet Number 2">
+ <Table ss:ExpandedColumnCount="4" ss:ExpandedRowCount="7" x:FullColumns="1"
+ x:FullRows="1" ss:DefaultRowHeight="15">
+ <Row>
+ <Cell><Data ss:Type="String">Start of 2nd sheet</Data></Cell>
+ </Row>
+ <Row>
+ <Cell><Data ss:Type="String">Sheet 2 row 2</Data></Cell>
+ </Row>
+ <Row ss:Index="4">
+ <Cell ss:StyleID="s63"><Data ss:Type="String">I'm in bold blue, on a
yellow background</Data></Cell>
+ </Row>
+ <Row ss:Index="6">
+ <Cell><Data ss:Type="String">cb=1</Data></Cell>
+ <Cell><Data ss:Type="String">cb=10</Data></Cell>
+ <Cell><Data ss:Type="String">cb=2</Data></Cell>
+ <Cell><Data ss:Type="String">cb=sum</Data></Cell>
+ </Row>
+ <Row>
+ <Cell><Data ss:Type="Number">1</Data></Cell>
+ <Cell><Data ss:Type="Number">10</Data></Cell>
+ <Cell><Data ss:Type="Number">2</Data></Cell>
+ <Cell ss:Formula="=SUM(RC[-3]:RC[-1])"><Data
ss:Type="Number">13</Data></Cell>
+ </Row>
+ </Table>
+ <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
+ <PageSetup>
+ <Header x:Margin="0.3"/>
+ <Footer x:Margin="0.3"/>
+ <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
+ </PageSetup>
+ <Selected/>
+ <Panes>
+ <Pane>
+ <Number>3</Number>
+ <ActiveRow>6</ActiveRow>
+ <ActiveCol>3</ActiveCol>
+ </Pane>
+ </Panes>
+ <ProtectObjects>False</ProtectObjects>
+ <ProtectScenarios>False</ProtectScenarios>
+ </WorksheetOptions>
+ </Worksheet>
+ <Worksheet ss:Name="Sheet3">
+ <Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
+ x:FullRows="1" ss:DefaultRowHeight="15">
+ </Table>
+ <WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
+ <PageSetup>
+ <Header x:Margin="0.3"/>
+ <Footer x:Margin="0.3"/>
+ <PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
+ </PageSetup>
+ <ProtectObjects>False</ProtectObjects>
+ <ProtectScenarios>False</ProtectScenarios>
+ </WorksheetOptions>
+ </Worksheet>
+</Workbook>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]