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]

Reply via email to