You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2011/09/19 13:43:10 UTC

svn commit: r1172575 - in /poi/trunk: src/documentation/content/xdocs/status.xml src/java/org/apache/poi/hssf/record/RecordFactoryInputStream.java src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java test-data/spreadsheet/51832.xls

Author: nick
Date: Mon Sep 19 11:43:09 2011
New Revision: 1172575

URL: http://svn.apache.org/viewvc?rev=1172575&view=rev
Log:
Fix bug #51832 - handle XLS files where the WRITEPROTECT record preceeds the FILEPASS one, rather than following as normal

Added:
    poi/trunk/test-data/spreadsheet/51832.xls   (with props)
Modified:
    poi/trunk/src/documentation/content/xdocs/status.xml
    poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactoryInputStream.java
    poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java

Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=1172575&r1=1172574&r2=1172575&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Mon Sep 19 11:43:09 2011
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta5" date="2011-??-??">
+           <action dev="poi-developers" type="fix">51832 - handle XLS files where the WRITEPROTECT record preceeds the FILEPASS one, rather than following as normal</action>
            <action dev="poi-developers" type="fix">51809 - correct GTE handling in COUNTIF</action>
            <action dev="poi-developers" type="add">Add HWPF API to update range text and delete bookmarks</action>
            <action dev="poi-developers" type="add">HWPF Bookmarks tables are correctly updated on text updates</action>

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactoryInputStream.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactoryInputStream.java?rev=1172575&r1=1172574&r2=1172575&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactoryInputStream.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactoryInputStream.java Mon Sep 19 11:43:09 2011
@@ -57,11 +57,26 @@ public final class RecordFactoryInputStr
 			FilePassRecord fpr = null;
 			if (rec instanceof BOFRecord) {
 				_hasBOFRecord = true;
+				
+				// Fetch the next record, and see if it indicates whether
+				//  the document is encrypted or not
 				if (rs.hasNextRecord()) {
 					rs.nextRecord();
 					rec = RecordFactory.createSingleRecord(rs);
 					recSize += rec.getRecordSize();
 					outputRecs.add(rec);
+					
+					// Encrypted is normally BOF then FILEPASS
+					// May sometimes be BOF, WRITEPROTECT, FILEPASS
+					if (rec instanceof WriteProtectRecord && rs.hasNextRecord()) {
+	               rs.nextRecord();
+	               rec = RecordFactory.createSingleRecord(rs);
+	               recSize += rec.getRecordSize();
+	               outputRecs.add(rec);
+					}
+					
+					// If it's a FILEPASS, track it specifically but
+					//  don't include it in the main stream
 					if (rec instanceof FilePassRecord) {
 						fpr = (FilePassRecord) rec;
 						outputRecs.remove(outputRecs.size()-1);

Modified: poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java?rev=1172575&r1=1172574&r2=1172575&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/usermodel/TestBugs.java Mon Sep 19 11:43:09 2011
@@ -18,6 +18,8 @@
 package org.apache.poi.hssf.usermodel;
 
 import junit.framework.AssertionFailedError;
+
+import org.apache.poi.EncryptedDocumentException;
 import org.apache.poi.hssf.HSSFITestDataProvider;
 import org.apache.poi.hssf.HSSFTestDataSamples;
 import org.apache.poi.hssf.OldExcelFormatException;
@@ -2179,4 +2181,16 @@ if(1==2) {
         writeOutAndReadBack(wb);
     }
 
+    /**
+     * Normally encrypted files have BOF then FILEPASS, but
+     *  some may squeeze a WRITEPROTECT in the middle
+     */
+    public void test51832() {
+       try {
+          openSample("51832.xls");
+          fail("Encrypted file");
+       } catch(EncryptedDocumentException e) {
+          // Good
+       }
+    }
 }

Added: poi/trunk/test-data/spreadsheet/51832.xls
URL: http://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/51832.xls?rev=1172575&view=auto
==============================================================================
Binary file - no diff available.

Propchange: poi/trunk/test-data/spreadsheet/51832.xls
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org