git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1172575 13f79535-47bb-0310-9956-ffa450edef68tags/REL_3_8_BETA5
@@ -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> |
@@ -57,11 +57,26 @@ public final class RecordFactoryInputStream { | |||
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); |
@@ -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 | |||
} | |||
} | |||
} |