You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@poi.apache.org by jh...@apache.org on 2006/08/27 14:00:39 UTC
svn commit: r437370 - in /jakarta/poi/trunk/src/java/org/apache/poi/hssf:
dev/BiffViewer.java eventmodel/EventRecordFactory.java
record/FilePassRecord.java record/RecordFactory.java
record/UnknownRecord.java record/WriteProtectRecord.java
Author: jheight
Date: Sun Aug 27 05:00:36 2006
New Revision: 437370
URL: http://svn.apache.org/viewvc?rev=437370&view=rev
Log:
Added explicit RecordFormatException when a FilePass record (indicating that the workbook is encrypted) is encountered.
Added:
jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/FilePassRecord.java
jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/WriteProtectRecord.java
Modified:
jakarta/poi/trunk/src/java/org/apache/poi/hssf/dev/BiffViewer.java
jakarta/poi/trunk/src/java/org/apache/poi/hssf/eventmodel/EventRecordFactory.java
jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactory.java
jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/UnknownRecord.java
Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/dev/BiffViewer.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/java/org/apache/poi/hssf/dev/BiffViewer.java?rev=437370&r1=437369&r2=437370&view=diff
==============================================================================
--- jakarta/poi/trunk/src/java/org/apache/poi/hssf/dev/BiffViewer.java (original)
+++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/dev/BiffViewer.java Sun Aug 27 05:00:36 2006
@@ -502,6 +502,12 @@
case VerticalPageBreakRecord.sid:
retval = new VerticalPageBreakRecord( in);
break;
+ case WriteProtectRecord.sid:
+ retval = new WriteProtectRecord( in);
+ break;
+ case FilePassRecord.sid:
+ retval = new FilePassRecord(in);
+ break;
default:
retval = new UnknownRecord( in );
}
Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/eventmodel/EventRecordFactory.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/java/org/apache/poi/hssf/eventmodel/EventRecordFactory.java?rev=437370&r1=437369&r2=437370&view=diff
==============================================================================
--- jakarta/poi/trunk/src/java/org/apache/poi/hssf/eventmodel/EventRecordFactory.java (original)
+++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/eventmodel/EventRecordFactory.java Sun Aug 27 05:00:36 2006
@@ -103,6 +103,8 @@
import org.apache.poi.hssf.record.WindowProtectRecord;
import org.apache.poi.hssf.record.WindowTwoRecord;
import org.apache.poi.hssf.record.WriteAccessRecord;
+import org.apache.poi.hssf.record.WriteProtectRecord;
+import org.apache.poi.hssf.record.FilePassRecord;
/**
@@ -153,7 +155,8 @@
BoolErrRecord.class, ExternSheetRecord.class, NameRecord.class,
LeftMarginRecord.class, RightMarginRecord.class,
TopMarginRecord.class, BottomMarginRecord.class,
- PaletteRecord.class, StringRecord.class, SharedFormulaRecord.class
+ PaletteRecord.class, StringRecord.class, SharedFormulaRecord.class,
+ WriteProtectRecord.class, FilePassRecord.class
};
}
Added: jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/FilePassRecord.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/FilePassRecord.java?rev=437370&view=auto
==============================================================================
--- jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/FilePassRecord.java (added)
+++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/FilePassRecord.java Sun Aug 27 05:00:36 2006
@@ -0,0 +1,106 @@
+
+/* ====================================================================
+ Copyright 2002-2004 Apache Software Foundation
+
+ Licensed 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.hssf.record;
+
+import org.apache.poi.util.LittleEndian;
+
+/**
+ * Title: File Pass Record<P>
+ * Description: Indicates that the record after this record are encrypted. HSSF does not support encrypted excel workbooks
+ * and the presence of this record will cause processing to be aborted.<p>
+ * REFERENCE: PG 420 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P>
+ * @author Jason Height (jheight at chariot dot net dot au)
+ * @version 3.0-pre
+ */
+
+public class FilePassRecord
+ extends Record
+{
+ public final static short sid = 0x2F;
+ private int field_1_encryptedpassword;
+
+ public FilePassRecord()
+ {
+ }
+
+ /**
+ * Constructs a FILEPASS record and sets its fields appropriately.
+ *
+ * @param id id must be 0x84 or an exception will be throw upon validation
+ * @param size the size of the data area of the record
+ * @param data data of the record (should not contain sid/len)
+ */
+
+ public FilePassRecord(RecordInputStream in)
+ {
+ super(in);
+ }
+
+ protected void validateSid(short id)
+ {
+ if (id != sid)
+ {
+ throw new RecordFormatException("NOT A FILEPASS RECORD");
+ }
+ }
+
+ protected void fillFields(RecordInputStream in)
+ {
+ field_1_encryptedpassword = in.readInt();
+
+ //Whilst i have read in the password, HSSF currently has no plans to support/decrypt the remainder
+ //of this workbook
+ throw new RecordFormatException("HSSF does not currently support encrypted workbooks");
+ }
+
+ public String toString()
+ {
+ StringBuffer buffer = new StringBuffer();
+
+ buffer.append("[FILEPASS]\n");
+ buffer.append(" .password = ").append(field_1_encryptedpassword)
+ .append("\n");
+ buffer.append("[/FILEPASS]\n");
+ return buffer.toString();
+ }
+
+ public int serialize(int offset, byte [] data)
+ {
+ LittleEndian.putShort(data, 0 + offset, sid);
+ LittleEndian.putShort(data, 2 + offset, ( short ) 0x4);
+ LittleEndian.putInt(data, 4 + offset, ( short ) field_1_encryptedpassword);
+ return getRecordSize();
+ }
+
+ public int getRecordSize()
+ {
+ return 8;
+ }
+
+ public short getSid()
+ {
+ return sid;
+ }
+
+ public Object clone() {
+ FilePassRecord rec = new FilePassRecord();
+ rec.field_1_encryptedpassword = field_1_encryptedpassword;
+ return rec;
+ }
+}
Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactory.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactory.java?rev=437370&r1=437369&r2=437370&view=diff
==============================================================================
--- jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactory.java (original)
+++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/RecordFactory.java Sun Aug 27 05:00:36 2006
@@ -72,7 +72,8 @@
DrawingRecord.class, DrawingGroupRecord.class, DrawingSelectionRecord.class,
ObjRecord.class, TextObjectRecord.class,
PaletteRecord.class, StringRecord.class, RecalcIdRecord.class, SharedFormulaRecord.class,
- HorizontalPageBreakRecord.class, VerticalPageBreakRecord.class
+ HorizontalPageBreakRecord.class, VerticalPageBreakRecord.class,
+ WriteProtectRecord.class, FilePassRecord.class
};
} else {
records = new Class[]
@@ -106,7 +107,8 @@
PaletteRecord.class, StringRecord.class, RecalcIdRecord.class, SharedFormulaRecord.class,
DrawingRecord.class, DrawingGroupRecord.class, DrawingSelectionRecord.class,
ObjRecord.class, TextObjectRecord.class,
- HorizontalPageBreakRecord.class, VerticalPageBreakRecord.class
+ HorizontalPageBreakRecord.class, VerticalPageBreakRecord.class,
+ WriteProtectRecord.class, FilePassRecord.class
};
}
Modified: jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/UnknownRecord.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/UnknownRecord.java?rev=437370&r1=437369&r2=437370&view=diff
==============================================================================
--- jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/UnknownRecord.java (original)
+++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/UnknownRecord.java Sun Aug 27 05:00:36 2006
@@ -66,6 +66,8 @@
{
sid = in.getSid();
thedata = in.readRemainder();
+
+ //System.out.println("UnknownRecord: 0x"+Integer.toHexString(sid));
}
/**
Added: jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/WriteProtectRecord.java
URL: http://svn.apache.org/viewvc/jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/WriteProtectRecord.java?rev=437370&view=auto
==============================================================================
--- jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/WriteProtectRecord.java (added)
+++ jakarta/poi/trunk/src/java/org/apache/poi/hssf/record/WriteProtectRecord.java Sun Aug 27 05:00:36 2006
@@ -0,0 +1,91 @@
+
+/* ====================================================================
+ Copyright 2002-2004 Apache Software Foundation
+
+ Licensed 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.hssf.record;
+
+import org.apache.poi.util.LittleEndian;
+import org.apache.poi.util.StringUtil;
+
+/**
+ * Title: Write Protect Record<P>
+ * Description: Indicated that the sheet/workbook is write protected.
+ * REFERENCE: PG 425 Microsoft Excel 97 Developer's Kit (ISBN: 1-57231-498-2)<P>
+ * @version 3.0-pre
+ */
+
+public class WriteProtectRecord
+ extends Record
+{
+ public final static short sid = 0x86;
+
+ public WriteProtectRecord()
+ {
+ }
+
+ /**
+ * Constructs a WriteAccess record and sets its fields appropriately.
+ *
+ * @param id id must be 0x5c or an exception will be throw upon validation
+ * @param size the size of the data area of the record
+ * @param data data of the record (should not contain sid/len)
+ */
+
+ public WriteProtectRecord(RecordInputStream in)
+ {
+ super(in);
+ }
+
+ protected void validateSid(short id)
+ {
+ if (id != sid)
+ {
+ throw new RecordFormatException("NOT A WRITEPROTECT RECORD");
+ }
+ }
+
+ protected void fillFields(RecordInputStream in)
+ {
+ }
+
+ public String toString()
+ {
+ StringBuffer buffer = new StringBuffer();
+
+ buffer.append("[WRITEPROTECT]\n");
+ buffer.append("[/WRITEPROTECT]\n");
+ return buffer.toString();
+ }
+
+ public int serialize(int offset, byte [] data)
+ {
+ LittleEndian.putShort(data, 0 + offset, sid);
+ LittleEndian.putShort(data, 2 + offset, (short)0);
+
+ return getRecordSize();
+ }
+
+ public int getRecordSize()
+ {
+ return 4;
+ }
+
+ public short getSid()
+ {
+ return sid;
+ }
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: poi-dev-unsubscribe@jakarta.apache.org
Mailing List: http://jakarta.apache.org/site/mail2.html#poi
The Apache Jakarta POI Project: http://jakarta.apache.org/poi/