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/