]> source.dussan.org Git - poi.git/commitdiff
- a few findbugs/sonar fixes
authorAndreas Beeker <kiwiwings@apache.org>
Wed, 23 Sep 2015 23:22:46 +0000 (23:22 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Wed, 23 Sep 2015 23:22:46 +0000 (23:22 +0000)
- removed obsolete openxml4j signature classes

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1704964 13f79535-47bb-0310-9956-ffa450edef68

23 files changed:
src/java/org/apache/poi/ddf/EscherBSERecord.java
src/java/org/apache/poi/ddf/EscherBitmapBlip.java
src/java/org/apache/poi/ddf/EscherBlipRecord.java
src/java/org/apache/poi/ddf/EscherClientAnchorRecord.java
src/java/org/apache/poi/poifs/filesystem/DocumentInputStream.java
src/ooxml/java/org/apache/poi/openxml4j/opc/internal/ZipContentTypeManager.java
src/ooxml/java/org/apache/poi/openxml4j/opc/internal/signature/DigitalCertificatePart.java [deleted file]
src/ooxml/java/org/apache/poi/openxml4j/opc/internal/signature/DigitalSignatureOriginPart.java [deleted file]
src/ooxml/java/org/apache/poi/openxml4j/opc/signature/PackageDigitalSignature.java [deleted file]
src/ooxml/java/org/apache/poi/openxml4j/opc/signature/PackageDigitalSignatureManager.java [deleted file]
src/scratchpad/src/org/apache/poi/hslf/record/Comment2000.java
src/scratchpad/src/org/apache/poi/hslf/record/CurrentUserAtom.java
src/scratchpad/src/org/apache/poi/hslf/record/ExEmbed.java
src/scratchpad/src/org/apache/poi/hslf/record/RecordContainer.java
src/scratchpad/src/org/apache/poi/hslf/record/TextRulerAtom.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFFreeformShape.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSheet.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSimpleShape.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlide.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShow.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowEncrypted.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFSlideShowImpl.java
src/scratchpad/src/org/apache/poi/hslf/usermodel/HSLFTextParagraph.java

index 556dcdd7e2eda19567ec70c38b1d66a6a5529380..496feb6fca59a1a873cc431d3ea5509b969f328f 100644 (file)
@@ -61,7 +61,8 @@ public final class EscherBSERecord extends EscherRecord {
         int pos = offset + 8;
         field_1_blipTypeWin32 = data[pos];
         field_2_blipTypeMacOS = data[pos + 1];
-        System.arraycopy( data, pos + 2, field_3_uid = new byte[16], 0, 16 );
+        field_3_uid = new byte[16];
+        System.arraycopy( data, pos + 2, field_3_uid, 0, 16 );
         field_4_tag = LittleEndian.getShort( data, pos + 18 );
         field_5_size = LittleEndian.getInt( data, pos + 20 );
         field_6_ref = LittleEndian.getInt( data, pos + 24 );
@@ -90,12 +91,12 @@ public final class EscherBSERecord extends EscherRecord {
     public int serialize(int offset, byte[] data, EscherSerializationListener listener) {
         listener.beforeRecordSerialize( offset, getRecordId(), this );
 
-        if (_remainingData == null)
+        if (_remainingData == null) {
             _remainingData = new byte[0];
+        }
 
         LittleEndian.putShort( data, offset, getOptions() );
         LittleEndian.putShort( data, offset + 2, getRecordId() );
-        if (_remainingData == null) _remainingData = new byte[0];
         int blipSize = field_12_blipRecord == null ? 0 : field_12_blipRecord.getRecordSize();
         int remainingBytes = _remainingData.length + 36 + blipSize;
         LittleEndian.putInt( data, offset + 4, remainingBytes );
@@ -117,8 +118,6 @@ public final class EscherBSERecord extends EscherRecord {
         {
             bytesWritten = field_12_blipRecord.serialize( offset + 44, data, new NullEscherSerializationListener() );
         }
-        if (_remainingData == null)
-            _remainingData = new byte[0];
         System.arraycopy( _remainingData, 0, data, offset + 44 + bytesWritten, _remainingData.length );
         int pos = offset + 8 + 36 + _remainingData.length + bytesWritten;
 
@@ -184,7 +183,9 @@ public final class EscherBSERecord extends EscherRecord {
      * 16 byte MD4 checksum.
      */
     public void setUid(byte[] uid) {
-        field_3_uid = uid;
+        if (uid != null && uid.length == 16) {
+            System.arraycopy(uid, 0, field_3_uid, 0, field_3_uid.length);
+        };
     }
 
     /**
@@ -306,7 +307,11 @@ public final class EscherBSERecord extends EscherRecord {
      * Any remaining data in this record.
      */
     public void setRemainingData(byte[] remainingData) {
-        _remainingData = remainingData;
+        if (remainingData == null) {
+            _remainingData = null;
+        } else {
+            _remainingData = remainingData.clone();
+        }
     }
 
     public String toString() {
index 096e0c4a87256761823791a5753f8f0f56e88cd8..e6855d19872b5b1d195b45c81882f8d571f92fbf 100644 (file)
@@ -74,9 +74,10 @@ public class EscherBitmapBlip extends EscherBlipRecord {
         return field_1_UID;
     }
 
-    public void setUID( byte[] field_1_UID )
-    {
-        this.field_1_UID = field_1_UID;
+    public void setUID( byte[] field_1_UID ) {
+        if (field_1_UID != null && field_1_UID.length == 16) {
+            System.arraycopy(field_1_UID, 0, this.field_1_UID , 0, 16);
+        }
     }
 
     public byte getMarker()
index b6bb8a46b09e7d8bfacc325953230f1d0a9444b6..43c0661ef641273c3969be850245cc3d74267ce7 100644 (file)
@@ -70,7 +70,11 @@ public class EscherBlipRecord extends EscherRecord { // TODO - instantiable supe
     }
 
     public void setPictureData(byte[] pictureData) {
-        field_pictureData = pictureData;
+        if (pictureData == null) {
+            field_pictureData = null;
+        } else {
+            field_pictureData = pictureData.clone();
+        }
     }
 
     public String toString() {
index 665a091d7d032ef6da1a7d6e1df26ecbacdeffac..4185d6397923bfde5d5b2a43b7bb0f6be5d5ffb0 100644 (file)
@@ -333,8 +333,11 @@ public class EscherClientAnchorRecord
     /**
      * Any remaining data in the record
      */
-    public void setRemainingData( byte[] remainingData )
-    {
-        this.remainingData = remainingData;
+    public void setRemainingData( byte[] remainingData ) {
+        if (remainingData == null) {
+            this.remainingData = null;
+        } else {
+            this.remainingData = remainingData.clone();
+        }
     }
 }
index 82959c7ffa664f47a0643fb74a7a1c12421d79e7..672a4aa117d1128ad3095634c6fb1c21d2d3207e 100644 (file)
@@ -85,14 +85,17 @@ public class DocumentInputStream extends InputStream implements LittleEndianInpu
       delegate = new NDocumentInputStream(document);
    }
 
+    @Override
        public int available() {
           return delegate.available();
        }
 
+    @Override
        public void close() {
           delegate.close();
        }
 
+    @Override
        public void mark(int ignoredReadlimit) {
                delegate.mark(ignoredReadlimit);
        }
@@ -102,18 +105,22 @@ public class DocumentInputStream extends InputStream implements LittleEndianInpu
         * 
         * @return <code>true</code> always
         */
+    @Override
        public boolean markSupported() {
                return true;
        }
 
+    @Override
        public int read() throws IOException {
           return delegate.read();
        }
 
+       @Override
        public int read(byte[] b) throws IOException {
                return read(b, 0, b.length);
        }
 
+    @Override
        public int read(byte[] b, int off, int len) throws IOException {
           return delegate.read(b, off, len);
        }
@@ -123,46 +130,57 @@ public class DocumentInputStream extends InputStream implements LittleEndianInpu
         * last called on this input stream. If mark() has not been called this
         * method repositions the stream to its beginning.
         */
+    @Override
        public void reset() {
           delegate.reset();
        }
 
+    @Override
        public long skip(long n) throws IOException {
           return delegate.skip(n);
        }
 
+    @Override
        public byte readByte() {
           return delegate.readByte();
        }
 
+    @Override
        public double readDouble() {
           return delegate.readDouble();
        }
 
+    @Override
        public short readShort() {
                return (short) readUShort();
        }
 
-   public void readFully(byte[] buf) {
-      readFully(buf, 0, buf.length);
-   }
+    @Override
+    public void readFully(byte[] buf) {
+        readFully(buf, 0, buf.length);
+    }
 
+    @Override
        public void readFully(byte[] buf, int off, int len) {
           delegate.readFully(buf, off, len);
        }
 
+    @Override
        public long readLong() {
           return delegate.readLong();
        }
 
+    @Override
        public int readInt() {
           return delegate.readInt();
        }
 
+    @Override
        public int readUShort() {
           return delegate.readUShort();
        }
 
+    @Override
        public int readUByte() {
           return delegate.readUByte();
        }
index 1b9e7fe2ca74321e1be821e69fd80f2eea4dafe8..1e00d93081da885a16b8865880a043dd9067eb0c 100644 (file)
@@ -54,7 +54,8 @@ public class ZipContentTypeManager extends ContentTypeManager {
                super(in, pkg);
        }
 
-       @Override
+       @SuppressWarnings("resource")
+    @Override
        public boolean saveImpl(Document content, OutputStream out) {
                ZipOutputStream zos = null;
                if (out instanceof ZipOutputStream)
diff --git a/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/signature/DigitalCertificatePart.java b/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/signature/DigitalCertificatePart.java
deleted file mode 100644 (file)
index fffa768..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-/* ====================================================================
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You 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.openxml4j.opc.internal.signature;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
-import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
-import org.apache.poi.openxml4j.opc.PackagePart;
-import org.apache.poi.openxml4j.opc.internal.ContentType;
-
-/**
- * Digital certificate part.
- *
- * @author Julien Chable
- * @version 0.1
- */
-public final class DigitalCertificatePart extends PackagePart  {
-
-       public DigitalCertificatePart() throws InvalidFormatException{
-               super(null, null, new ContentType(""));
-               // TODO: Review constructor
-       }
-
-       @Override
-       public void close() {
-       }
-
-       @Override
-       public void flush() {
-       }
-
-       @Override
-       protected InputStream getInputStreamImpl() throws IOException {
-               return null;
-       }
-
-       @Override
-       protected OutputStream getOutputStreamImpl() {
-               return null;
-       }
-
-       @Override
-       public boolean load(InputStream ios) throws InvalidFormatException {
-               return false;
-       }
-
-       @Override
-       public boolean save(OutputStream zos) throws OpenXML4JException {
-               return false;
-       }
-}
diff --git a/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/signature/DigitalSignatureOriginPart.java b/src/ooxml/java/org/apache/poi/openxml4j/opc/internal/signature/DigitalSignatureOriginPart.java
deleted file mode 100644 (file)
index b6c1a8a..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-/* ====================================================================
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You 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.openxml4j.opc.internal.signature;
-
-/**
- * Represents a digital signature origin part.
- *
- * @author Julien Chable
- * @version 0.1
- */
-public final class DigitalSignatureOriginPart {
-
-}
diff --git a/src/ooxml/java/org/apache/poi/openxml4j/opc/signature/PackageDigitalSignature.java b/src/ooxml/java/org/apache/poi/openxml4j/opc/signature/PackageDigitalSignature.java
deleted file mode 100644 (file)
index ee9bb64..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/* ====================================================================
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You 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.openxml4j.opc.signature;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-
-import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
-import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
-import org.apache.poi.openxml4j.opc.PackagePart;
-import org.apache.poi.openxml4j.opc.internal.ContentType;
-
-public final class PackageDigitalSignature extends PackagePart {
-
-       public PackageDigitalSignature() throws InvalidFormatException {
-               super(null, null, new ContentType(""));
-               // TODO: Review constructor
-       }
-
-       @Override
-       public void close() {
-       }
-
-       @Override
-       public void flush() {
-       }
-
-       @Override
-       protected InputStream getInputStreamImpl() throws IOException {
-               return null;
-       }
-
-       @Override
-       protected OutputStream getOutputStreamImpl() {
-               return null;
-       }
-
-       @Override
-       public boolean load(InputStream ios) throws InvalidFormatException {
-               return false;
-       }
-
-       @Override
-       public boolean save(OutputStream zos) throws OpenXML4JException {
-               return false;
-       }
-}
diff --git a/src/ooxml/java/org/apache/poi/openxml4j/opc/signature/PackageDigitalSignatureManager.java b/src/ooxml/java/org/apache/poi/openxml4j/opc/signature/PackageDigitalSignatureManager.java
deleted file mode 100644 (file)
index 64007f6..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-/* ====================================================================
-   Licensed to the Apache Software Foundation (ASF) under one or more
-   contributor license agreements.  See the NOTICE file distributed with
-   this work for additional information regarding copyright ownership.
-   The ASF licenses this file to You 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.openxml4j.opc.signature;
-
-public final class PackageDigitalSignatureManager {
-
-}
index 2714bad2905c1982ebfa81faf305980909f3836f..b64134b0d438a056bf8a2fd64ec69e5d2accb990 100644 (file)
@@ -124,6 +124,7 @@ public final class Comment2000 extends RecordContainer {
                     case 0: authorRecord = cs; break;
                     case 1: commentRecord = cs; break;
                     case 2: authorInitialsRecord = cs; break;
+                    default: break;
                 }
             } else if (r instanceof Comment2000Atom){
                 commentAtom = (Comment2000Atom)r;
index e34103a8ce1856a1c102e2c5e5b375dde059c8ac..71820076ed956ff9c1fcdaf0dfe61d1a4a6e624f 100644 (file)
@@ -133,10 +133,17 @@ public class CurrentUserAtom
                }
                
                // Grab the contents
-               _contents = new byte[docProps.getSize()];
+               int len = docProps.getSize();
+               _contents = new byte[len];
                InputStream in = dir.createDocumentInputStream("Current User");
-               in.read(_contents);
+               int readLen = in.read(_contents);
+               in.close();
 
+        if (len != readLen) {
+            throw new IOException("Current User input stream ended prematurely - expected "+len+" bytes - received "+readLen+" bytes");
+        }
+               
+               
                // See how long it is. If it's under 28 bytes long, we can't
                //  read it
                if(_contents.length < 28) {
index 09e95abe4c22285b8996181382ad8667ff0ba5f5..7580450cd80f122b660a1e349fe83626bc15d83d 100644 (file)
@@ -113,6 +113,7 @@ public class ExEmbed extends RecordContainer {
                     case 0x1: menuName = cs; break;
                     case 0x2: progId = cs; break;
                     case 0x3: clipboardName = cs; break;
+                    default: break;
                 }
             }
         }
index 91a590afe8cd4437eec332cefa9f71df00402021..a25ca605c2b3d21abef27e71e414180dde7f03ae 100644 (file)
@@ -36,7 +36,6 @@ import java.util.ArrayList;
 public abstract class RecordContainer extends Record
 {
        protected Record[] _children;
-       private Boolean changingChildRecordsLock = Boolean.TRUE;
 
        /**
         * Return any children
@@ -58,14 +57,12 @@ public abstract class RecordContainer extends Record
         * Finds the location of the given child record
         */
        private int findChildLocation(Record child) {
-               // Synchronized as we don't want things changing
-               //  as we're doing our search
-               synchronized(changingChildRecordsLock) {
-                       for(int i=0; i<_children.length; i++) {
-                               if(_children[i].equals(child)) {
-                                       return i;
-                               }
+           int i=0;
+               for(Record r : _children) {
+                       if (r.equals(child)) {
+                               return i;
                        }
+                       i++;
                }
                return -1;
        }
@@ -75,14 +72,12 @@ public abstract class RecordContainer extends Record
         * @param newChild The child record to add
         */
        private void appendChild(Record newChild) {
-               synchronized(changingChildRecordsLock) {
-                       // Copy over, and pop the child in at the end
-                       Record[] nc = new Record[(_children.length + 1)];
-                       System.arraycopy(_children, 0, nc, 0, _children.length);
-                       // Switch the arrays
-                       nc[_children.length] = newChild;
-                       _children = nc;
-               }
+               // Copy over, and pop the child in at the end
+               Record[] nc = new Record[(_children.length + 1)];
+               System.arraycopy(_children, 0, nc, 0, _children.length);
+               // Switch the arrays
+               nc[_children.length] = newChild;
+               _children = nc;
        }
 
        /**
@@ -92,18 +87,15 @@ public abstract class RecordContainer extends Record
         * @param position
         */
        private void addChildAt(Record newChild, int position) {
-               synchronized(changingChildRecordsLock) {
-                       // Firstly, have the child added in at the end
-                       appendChild(newChild);
+               // Firstly, have the child added in at the end
+               appendChild(newChild);
 
-                       // Now, have them moved to the right place
-                       moveChildRecords( (_children.length-1), position, 1 );
-               }
+               // Now, have them moved to the right place
+               moveChildRecords( (_children.length-1), position, 1 );
        }
 
        /**
-        * Moves <i>number</i> child records from <i>oldLoc</i>
-        *  to <i>newLoc</i>. Caller must have the changingChildRecordsLock
+        * Moves {@code number} child records from {@code oldLoc} to {@code newLoc}. 
         * @param oldLoc the current location of the records to move
         * @param newLoc the new location for the records
         * @param number the number of records to move
@@ -162,9 +154,7 @@ public abstract class RecordContainer extends Record
         * Add a new child record onto a record's list of children.
         */
        public void appendChildRecord(Record newChild) {
-               synchronized(changingChildRecordsLock) {
-                       appendChild(newChild);
-               }
+               appendChild(newChild);
        }
 
        /**
@@ -173,16 +163,14 @@ public abstract class RecordContainer extends Record
         * @param after
         */
        public void addChildAfter(Record newChild, Record after) {
-               synchronized(changingChildRecordsLock) {
-                       // Decide where we're going to put it
-                       int loc = findChildLocation(after);
-                       if(loc == -1) {
-                               throw new IllegalArgumentException("Asked to add a new child after another record, but that record wasn't one of our children!");
-                       }
-
-                       // Add one place after the supplied record
-                       addChildAt(newChild, loc+1);
+               // Decide where we're going to put it
+               int loc = findChildLocation(after);
+               if(loc == -1) {
+                       throw new IllegalArgumentException("Asked to add a new child after another record, but that record wasn't one of our children!");
                }
+
+               // Add one place after the supplied record
+               addChildAt(newChild, loc+1);
        }
 
        /**
@@ -191,16 +179,14 @@ public abstract class RecordContainer extends Record
         * @param before
         */
        public void addChildBefore(Record newChild, Record before) {
-               synchronized(changingChildRecordsLock) {
-                       // Decide where we're going to put it
-                       int loc = findChildLocation(before);
-                       if(loc == -1) {
-                               throw new IllegalArgumentException("Asked to add a new child before another record, but that record wasn't one of our children!");
-                       }
-
-                       // Add at the place of the supplied record
-                       addChildAt(newChild, loc);
+               // Decide where we're going to put it
+               int loc = findChildLocation(before);
+               if(loc == -1) {
+                       throw new IllegalArgumentException("Asked to add a new child before another record, but that record wasn't one of our children!");
                }
+
+               // Add at the place of the supplied record
+               addChildAt(newChild, loc);
        }
 
        /**
@@ -216,22 +202,20 @@ public abstract class RecordContainer extends Record
        public void moveChildrenBefore(Record firstChild, int number, Record before) {
                if(number < 1) { return; }
 
-               synchronized(changingChildRecordsLock) {
-                       // Decide where we're going to put them
-                       int newLoc = findChildLocation(before);
-                       if(newLoc == -1) {
-                               throw new IllegalArgumentException("Asked to move children before another record, but that record wasn't one of our children!");
-                       }
-
-                       // Figure out where they are now
-                       int oldLoc = findChildLocation(firstChild);
-                       if(oldLoc == -1) {
-                               throw new IllegalArgumentException("Asked to move a record that wasn't a child!");
-                       }
+               // Decide where we're going to put them
+               int newLoc = findChildLocation(before);
+               if(newLoc == -1) {
+                       throw new IllegalArgumentException("Asked to move children before another record, but that record wasn't one of our children!");
+               }
 
-                       // Actually move
-                       moveChildRecords(oldLoc, newLoc, number);
+               // Figure out where they are now
+               int oldLoc = findChildLocation(firstChild);
+               if(oldLoc == -1) {
+                       throw new IllegalArgumentException("Asked to move a record that wasn't a child!");
                }
+
+               // Actually move
+               moveChildRecords(oldLoc, newLoc, number);
        }
 
        /**
@@ -239,25 +223,22 @@ public abstract class RecordContainer extends Record
         */
        public void moveChildrenAfter(Record firstChild, int number, Record after) {
                if(number < 1) { return; }
+               // Decide where we're going to put them
+               int newLoc = findChildLocation(after);
+               if(newLoc == -1) {
+                       throw new IllegalArgumentException("Asked to move children before another record, but that record wasn't one of our children!");
+               }
+               // We actually want after this though
+               newLoc++;
 
-               synchronized(changingChildRecordsLock) {
-                       // Decide where we're going to put them
-                       int newLoc = findChildLocation(after);
-                       if(newLoc == -1) {
-                               throw new IllegalArgumentException("Asked to move children before another record, but that record wasn't one of our children!");
-                       }
-                       // We actually want after this though
-                       newLoc++;
-
-                       // Figure out where they are now
-                       int oldLoc = findChildLocation(firstChild);
-                       if(oldLoc == -1) {
-                               throw new IllegalArgumentException("Asked to move a record that wasn't a child!");
-                       }
-
-                       // Actually move
-                       moveChildRecords(oldLoc, newLoc, number);
+               // Figure out where they are now
+               int oldLoc = findChildLocation(firstChild);
+               if(oldLoc == -1) {
+                       throw new IllegalArgumentException("Asked to move a record that wasn't a child!");
                }
+
+               // Actually move
+               moveChildRecords(oldLoc, newLoc, number);
        }
 
     /**
index 84f03b47246328b60542f5262cddc907e67d4c3e..f81061dc0ab73b81b481d7ea59f023918b873eb4 100644 (file)
@@ -149,6 +149,8 @@ public final class TextRulerAtom extends RecordAtom {
                         val = LittleEndian.getShort(_data, pos); pos += 2;
                         textOffsets[bits[i]-8] = val;
                         break;
+                    default:
+                        break;
                 }
             }
         }
index dbfc6ec1fc6fb438d1b5f6f60cffd0ade6ba94b2..0c21c7e8b8043eedd024ce372d72838151d204a8 100644 (file)
@@ -133,6 +133,9 @@ public final class HSLFFreeformShape extends HSLFAutoShape implements FreeformSh
                     isClosed = true;
                     numPoints++;
                     break;
+                default:
+                    logger.log(POILogger.WARN, "Ignoring invalid segment type "+type);
+                    break;
             }
 
             it.next();
index 419ded3a150b3f06bc17b679bd8473fc8ce95df4..139840c548704f96dd551764cde8a1da36b7ef6b 100644 (file)
@@ -319,7 +319,7 @@ public abstract class HSLFSheet implements HSLFShapeContainer, Sheet<HSLFShape,H
         for (HSLFShape shape : getShapes()) {
             if(shape instanceof HSLFTextShape){
                 HSLFTextShape tx = (HSLFTextShape)shape;
-                if (tx != null && tx.getRunType() == type) {
+                if (tx.getRunType() == type) {
                     return tx;
                 }
             }
index dc5cde23d47e6117507d949896b6227c6b308faa..d75aebf0077c8f1129ebe8c890f6236b265dad81 100644 (file)
@@ -129,7 +129,7 @@ public abstract class HSLFSimpleShape extends HSLFShape implements SimpleShape<H
         } else {
             int rgb = new Color(color.getBlue(), color.getGreen(), color.getRed(), 0).getRGB();
             setEscherProperty(opt, EscherProperties.LINESTYLE__COLOR, rgb);
-            setEscherProperty(opt, EscherProperties.LINESTYLE__NOLINEDRAWDASH, color == null ? 0x180010 : 0x180018);
+            setEscherProperty(opt, EscherProperties.LINESTYLE__NOLINEDRAWDASH, 0x180018);
         }
     }
 
@@ -332,6 +332,9 @@ public abstract class HSLFSimpleShape extends HSLFShape implements SimpleShape<H
                 infoAtom.setJump(InteractiveInfoAtom.JUMP_NONE);
                 infoAtom.setHyperlinkType(InteractiveInfoAtom.LINK_SlideNumber);
                 break;
+            default:
+                logger.log(POILogger.WARN, "Ignore unknown hyperlink type : "+link.getTitle());
+                break;
         }
 
         infoAtom.setHyperlinkID(link.getId());
index fad85f46a186ed55534585a4aca227358f720412..b4dd77144f69d90b5f3c666c8503ffef8be374b7 100644 (file)
@@ -180,6 +180,8 @@ public final class HSLFSlide extends HSLFSheet implements Slide<HSLFShape,HSLFTe
                 case EscherContainerRecord.SP_CONTAINER:
                     spr = c.getChildById(EscherSpRecord.RECORD_ID);
                     break;
+                default:
+                    break;
             }
             if(spr != null) spr.setShapeId(allocateShapeId());
         }
index c300bd81c22d86440e2a2be5aad87f0c5a0cf0c9..7064a862bf79344d1d14cebe94bbf6fd971d2ab9 100644 (file)
@@ -659,7 +659,7 @@ public final class HSLFSlideShow implements SlideShow<HSLFShape,HSLFTextParagrap
 
                // if the removed slide had notes - remove references to them too
 
-        int notesId = (removedSlide != null) ? removedSlide.getSlideRecord().getSlideAtom().getNotesID() : 0;
+        int notesId = removedSlide.getSlideRecord().getSlideAtom().getNotesID();
                if (notesId != 0) {
                        SlideListWithText nslwt = _documentRecord.getNotesSlideListWithText();
                        records = new ArrayList<Record>();
index 99aa8c645fd932dcb656575204f4ebf3d43f17ae..6f0e9e4c494f114aa2571ab65da3c8a33e037b2f 100644 (file)
@@ -38,7 +38,6 @@ import org.apache.poi.hslf.record.UserEditAtom;
 import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey;
 import org.apache.poi.poifs.crypt.Decryptor;
 import org.apache.poi.poifs.crypt.EncryptionInfo;
-import org.apache.poi.poifs.crypt.Encryptor;
 import org.apache.poi.poifs.crypt.cryptoapi.CryptoAPIDecryptor;
 import org.apache.poi.poifs.crypt.cryptoapi.CryptoAPIEncryptor;
 import org.apache.poi.util.BitField;
@@ -95,8 +94,8 @@ public class HSLFSlideShowEncrypted {
         }
         assert(r instanceof DocumentEncryptionAtom);
         this.dea = (DocumentEncryptionAtom)r;
+        decryptInit();
         
-        CryptoAPIDecryptor dec = (CryptoAPIDecryptor)dea.getEncryptionInfo().getDecryptor();
         String pass = Biff8EncryptionKey.getCurrentUserPassword();
         if(!dec.verifyPassword(pass != null ? pass : Decryptor.DEFAULT_PASSWORD)) {
             throw new EncryptedPowerPointFileException("PowerPoint file is encrypted. The correct password needs to be set via Biff8EncryptionKey.setCurrentUserPassword()");
@@ -342,10 +341,11 @@ public class HSLFSlideShowEncrypted {
             // create password record
             if (dea == null) {
                 dea = new DocumentEncryptionAtom();
+                enc = null;
             }
+            encryptInit();
             EncryptionInfo ei = dea.getEncryptionInfo();
             byte salt[] = ei.getVerifier().getSalt();
-            Encryptor enc = ei.getEncryptor();
             if (salt == null) {
                 enc.confirmPassword(password);
             } else {
@@ -396,11 +396,12 @@ public class HSLFSlideShowEncrypted {
             
             recordMap.put(pdr.getLastOnDiskOffset(), r);
         }
+        
+        assert(uea != null && pph != null && uea.getPersistPointersOffset() == pph.getLastOnDiskOffset());
+        
         recordMap.put(pph.getLastOnDiskOffset(), pph);
         recordMap.put(uea.getLastOnDiskOffset(), uea);
 
-        assert(uea != null && pph != null && uea.getPersistPointersOffset() == pph.getLastOnDiskOffset());
-        
         if (duplicatedCount == 0 && obsoleteOffsets.isEmpty()) {
             return records;
         }
index 80781ee14e4d40757e3e0e0113784ea218bb5c6c..d45b7cb996e419d7baea0342619b87fabbd2203f 100644 (file)
@@ -221,8 +221,15 @@ public final class HSLFSlideShowImpl extends POIDocument {
                        (DocumentEntry)directory.getEntry("PowerPoint Document");
 
                // Grab the document stream
-               _docstream = new byte[docProps.getSize()];
-               directory.createDocumentInputStream("PowerPoint Document").read(_docstream);
+               int len = docProps.getSize();
+               _docstream = new byte[len];
+               InputStream is = directory.createDocumentInputStream("PowerPoint Document");
+               int readLen = is.read(_docstream);
+               is.close();
+               
+               if (len != readLen) {
+                   throw new IOException("Document input stream ended prematurely - expected "+len+" bytes - received "+readLen+" bytes");
+               }
        }
 
        /**
@@ -374,11 +381,16 @@ public final class HSLFSlideShowImpl extends POIDocument {
         HSLFSlideShowEncrypted decryptData = new HSLFSlideShowEncrypted(getDocumentEncryptionAtom());
         
                DocumentEntry entry = (DocumentEntry)directory.getEntry("Pictures");
-               byte[] pictstream = new byte[entry.getSize()];
+               int len = entry.getSize();
+               byte[] pictstream = new byte[len];
                DocumentInputStream is = directory.createDocumentInputStream(entry);
-               is.read(pictstream);
+               int readLen = is.read(pictstream);
                is.close();
 
+               if (len != readLen) {
+                   throw new IOException("Picture stream ended prematurely - expected "+len+" bytes - received "+readLen+" bytes");
+               }
+
                
         int pos = 0;
                // An empty picture record (length 0) will take up 8 bytes
@@ -507,7 +519,9 @@ public final class HSLFSlideShowImpl extends POIDocument {
         }
         cos.close();
         
-        assert(usr != null && ptr != null);
+        if (usr == null || ptr == null) {
+            throw new HSLFException("UserEditAtom or PersistPtr can't be determined.");
+        }
         
         Map<Integer,Integer> persistIds = new HashMap<Integer,Integer>();
         for (Map.Entry<Integer,Integer> entry : ptr.getSlideLocationsLookup().entrySet()) {
@@ -540,7 +554,7 @@ public final class HSLFSlideShowImpl extends POIDocument {
         // Update and write out the Current User atom
         int oldLastUserEditAtomPos = (int)currentUser.getCurrentEditOffset();
         Integer newLastUserEditAtomPos = oldToNewPositions.get(oldLastUserEditAtomPos);
-        if(usr == null || newLastUserEditAtomPos == null || usr.getLastOnDiskOffset() != newLastUserEditAtomPos) {
+        if(newLastUserEditAtomPos == null || usr.getLastOnDiskOffset() != newLastUserEditAtomPos) {
             throw new HSLFException("Couldn't find the new location of the last UserEditAtom that used to be at " + oldLastUserEditAtomPos);
         }
         currentUser.setCurrentEditOffset(usr.getLastOnDiskOffset());
index 64308e8086331669715c5d0c5697dc4d466330d3..39fe74c2a9b66ff8f4fbab99f1549452c48dce7c 100644 (file)
@@ -21,18 +21,49 @@ import static org.apache.poi.hslf.record.RecordTypes.OutlineTextRefAtom;
 \r
 import java.awt.Color;\r
 import java.io.IOException;\r
-import java.util.*;\r
+import java.util.ArrayList;\r
+import java.util.Arrays;\r
+import java.util.Iterator;\r
+import java.util.List;\r
 \r
 import org.apache.poi.hslf.model.PPFont;\r
-import org.apache.poi.hslf.model.textproperties.*;\r
+import org.apache.poi.hslf.model.textproperties.BitMaskTextProp;\r
+import org.apache.poi.hslf.model.textproperties.FontAlignmentProp;\r
+import org.apache.poi.hslf.model.textproperties.IndentProp;\r
+import org.apache.poi.hslf.model.textproperties.ParagraphFlagsTextProp;\r
+import org.apache.poi.hslf.model.textproperties.TextAlignmentProp;\r
+import org.apache.poi.hslf.model.textproperties.TextPFException9;\r
+import org.apache.poi.hslf.model.textproperties.TextProp;\r
+import org.apache.poi.hslf.model.textproperties.TextPropCollection;\r
 import org.apache.poi.hslf.model.textproperties.TextPropCollection.TextPropType;\r
-import org.apache.poi.hslf.record.*;\r
+import org.apache.poi.hslf.record.ColorSchemeAtom;\r
+import org.apache.poi.hslf.record.EscherTextboxWrapper;\r
+import org.apache.poi.hslf.record.FontCollection;\r
+import org.apache.poi.hslf.record.MasterTextPropAtom;\r
+import org.apache.poi.hslf.record.OutlineTextRefAtom;\r
+import org.apache.poi.hslf.record.PPDrawing;\r
+import org.apache.poi.hslf.record.Record;\r
+import org.apache.poi.hslf.record.RecordContainer;\r
+import org.apache.poi.hslf.record.RecordTypes;\r
+import org.apache.poi.hslf.record.SlideListWithText;\r
+import org.apache.poi.hslf.record.SlidePersistAtom;\r
+import org.apache.poi.hslf.record.StyleTextProp9Atom;\r
+import org.apache.poi.hslf.record.StyleTextPropAtom;\r
+import org.apache.poi.hslf.record.TextBytesAtom;\r
+import org.apache.poi.hslf.record.TextCharsAtom;\r
+import org.apache.poi.hslf.record.TextHeaderAtom;\r
+import org.apache.poi.hslf.record.TextRulerAtom;\r
+import org.apache.poi.hslf.record.TextSpecInfoAtom;\r
 import org.apache.poi.sl.draw.DrawPaint;\r
 import org.apache.poi.sl.usermodel.AutoNumberingScheme;\r
 import org.apache.poi.sl.usermodel.PaintStyle;\r
 import org.apache.poi.sl.usermodel.PaintStyle.SolidPaint;\r
 import org.apache.poi.sl.usermodel.TextParagraph;\r
-import org.apache.poi.util.*;\r
+import org.apache.poi.util.LocaleUtil;\r
+import org.apache.poi.util.POILogFactory;\r
+import org.apache.poi.util.POILogger;\r
+import org.apache.poi.util.StringUtil;\r
+import org.apache.poi.util.Units;\r
 \r
 /**\r
  * This class represents a run of text in a powerpoint document. That\r
@@ -906,12 +937,16 @@ public final class HSLFTextParagraph implements TextParagraph<HSLFShape,HSLFText
         }\r
 \r
         Iterator<HSLFTextRun> runIter = htp.getTextRuns().iterator();\r
-        HSLFTextRun htr = runIter.next();\r
-        htr.setText("");\r
-        assert (htr != null);\r
-        while (runIter.hasNext()) {\r
-            runIter.next();\r
-            runIter.remove();\r
+        if (runIter.hasNext()) {\r
+            HSLFTextRun htr = runIter.next();\r
+            htr.setText("");\r
+            while (runIter.hasNext()) {\r
+                runIter.next();\r
+                runIter.remove();\r
+            }\r
+        } else {\r
+            HSLFTextRun trun = new HSLFTextRun(htp);\r
+            htp.addTextRun(trun);\r
         }\r
 \r
         return appendText(paragraphs, text, false);\r