[prev in list] [next in list] [prev in thread] [next in thread] 

List:       poi-dev
Subject:    svn commit: r437370 - in /jakarta/poi/trunk/src/java/org/apache/poi/hssf:
From:       jheight () apache ! org
Date:       2006-08-27 12:00:39
Message-ID: 20060827120041.5DA6F1A981A () eris ! apache ! org
[Download RAW message or body]

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/


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic