]> source.dussan.org Git - poi.git/commitdiff
SonarQube fixes
authorAndreas Beeker <kiwiwings@apache.org>
Thu, 5 Jan 2017 23:40:57 +0000 (23:40 +0000)
committerAndreas Beeker <kiwiwings@apache.org>
Thu, 5 Jan 2017 23:40:57 +0000 (23:40 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1777526 13f79535-47bb-0310-9956-ffa450edef68

src/examples/src/org/apache/poi/hssf/usermodel/examples/EmbeddedObjects.java
src/java/org/apache/poi/poifs/crypt/cryptoapi/CryptoAPIDecryptor.java
src/ooxml/java/org/apache/poi/openxml4j/opc/ZipPackage.java

index 00dbaccdfc6255d552f9c1a9d54ec144d2bfe65a..57df51c1af709705518c3609b89d0b772fbd4fd5 100644 (file)
 ==================================================================== */\r
 package org.apache.poi.hssf.usermodel.examples;\r
 \r
+import java.io.Closeable;\r
 import java.io.FileInputStream;\r
-import java.util.Iterator;\r
 \r
 import org.apache.poi.hslf.usermodel.HSLFSlideShow;\r
-import org.apache.poi.hslf.usermodel.HSLFSlideShowImpl;\r
 import org.apache.poi.hssf.usermodel.HSSFObjectData;\r
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;\r
 import org.apache.poi.hwpf.HWPFDocument;\r
@@ -39,26 +38,19 @@ public class EmbeddedObjects {
         for (HSSFObjectData obj : workbook.getAllEmbeddedObjects()) {\r
             //the OLE2 Class Name of the object\r
             String oleName = obj.getOLE2ClassName();\r
+            DirectoryNode dn = (obj.hasDirectoryEntry()) ? (DirectoryNode) obj.getDirectory() : null;\r
+            Closeable document = null;\r
             if (oleName.equals("Worksheet")) {\r
-                DirectoryNode dn = (DirectoryNode) obj.getDirectory();\r
-                HSSFWorkbook embeddedWorkbook = new HSSFWorkbook(dn, fs, false);\r
-                //System.out.println(entry.getName() + ": " + embeddedWorkbook.getNumberOfSheets());\r
-                embeddedWorkbook.close();\r
+                document = new HSSFWorkbook(dn, fs, false);\r
             } else if (oleName.equals("Document")) {\r
-                DirectoryNode dn = (DirectoryNode) obj.getDirectory();\r
-                HWPFDocument embeddedWordDocument = new HWPFDocument(dn);\r
-                //System.out.println(entry.getName() + ": " + embeddedWordDocument.getRange().text());\r
+                document = new HWPFDocument(dn);\r
             }  else if (oleName.equals("Presentation")) {\r
-                DirectoryNode dn = (DirectoryNode) obj.getDirectory();\r
-                HSLFSlideShow embeddedPowerPointDocument = new HSLFSlideShow(new HSLFSlideShowImpl(dn));\r
-                //System.out.println(entry.getName() + ": " + embeddedPowerPointDocument.getSlides().length);\r
+                document = new HSLFSlideShow(dn);\r
             } else {\r
-                if(obj.hasDirectoryEntry()){\r
+                if(dn != null){\r
                     // The DirectoryEntry is a DocumentNode. Examine its entries to find out what it is\r
-                    DirectoryNode dn = (DirectoryNode) obj.getDirectory();\r
-                    for (Iterator<Entry> entries = dn.getEntries(); entries.hasNext();) {\r
-                        Entry entry = entries.next();\r
-                        //System.out.println(oleName + "." + entry.getName());\r
+                    for (Entry entry : dn) {\r
+                         String name = entry.getName();\r
                     }\r
                 } else {\r
                     // There is no DirectoryEntry\r
@@ -66,6 +58,9 @@ public class EmbeddedObjects {
                     byte[] objectData = obj.getObjectData();\r
                 }\r
             }\r
+            if (document != null) {\r
+                document.close();\r
+            }\r
         }\r
         workbook.close();\r
     }\r
index edbd6ea3e508c2cce530cf39333e957d95f3e222..af9d62b85b39effcbd60dfed677ecbb61a9cb0b4 100644 (file)
@@ -53,10 +53,10 @@ public class CryptoAPIDecryptor extends Decryptor implements Cloneable {
 \r
     private long length = -1L;\r
     private int chunkSize = -1;\r
-    \r
+\r
     static class StreamDescriptorEntry {\r
         static BitField flagStream = BitFieldFactory.getInstance(1);\r
-        \r
+\r
         int streamOffset;\r
         int streamSize;\r
         int block;\r
@@ -149,17 +149,16 @@ public class CryptoAPIDecryptor extends Decryptor implements Cloneable {
             throws IOException, GeneralSecurityException {\r
         return new CryptoAPICipherInputStream(stream, size, initialPos);\r
     }\r
-    \r
+\r
     /**\r
      * Decrypt the Document-/SummaryInformation and other optionally streams.\r
      * Opposed to other crypto modes, cryptoapi is record based and can't be used\r
      * to stream-decrypt a whole file\r
-     * \r
+     *\r
      * @see <a href="http://msdn.microsoft.com/en-us/library/dd943321(v=office.12).aspx">2.3.5.4 RC4 CryptoAPI Encrypted Summary Stream</a>\r
      */\r
     public POIFSFileSystem getSummaryEntries(DirectoryNode root, String encryptedStream)\r
     throws IOException, GeneralSecurityException {\r
-        POIFSFileSystem fsOut = new POIFSFileSystem();\r
         // HSLF: encryptedStream\r
         // HSSF: encryption\r
         DocumentNode es = (DocumentNode) root.getEntry(encryptedStream);\r
@@ -169,6 +168,7 @@ public class CryptoAPIDecryptor extends Decryptor implements Cloneable {
         dis.close();\r
         CryptoAPIDocumentInputStream sbis = new CryptoAPIDocumentInputStream(this, bos.toByteArray());\r
         LittleEndianInputStream leis = new LittleEndianInputStream(sbis);\r
+        POIFSFileSystem fsOut = null;\r
         try {\r
             int streamDescriptorArrayOffset = (int) leis.readUInt();\r
             /* int streamDescriptorArraySize = (int) */ leis.readUInt();\r
@@ -193,7 +193,8 @@ public class CryptoAPIDecryptor extends Decryptor implements Cloneable {
                 leis.readShort();\r
                 assert(entry.streamName.length() == nameSize);\r
             }\r
-    \r
+\r
+            fsOut = new POIFSFileSystem();\r
             for (StreamDescriptorEntry entry : entries) {\r
                 sbis.seek(entry.streamOffset);\r
                 sbis.setBlock(entry.block);\r
@@ -201,11 +202,19 @@ public class CryptoAPIDecryptor extends Decryptor implements Cloneable {
                 fsOut.createDocument(is, entry.streamName);\r
                 is.close();\r
             }\r
+        } catch (Exception e) {\r
+            IOUtils.closeQuietly(fsOut);\r
+            if (e instanceof GeneralSecurityException) {\r
+                throw (GeneralSecurityException)e;\r
+            } else if (e instanceof IOException) {\r
+                throw (IOException)e;\r
+            } else {\r
+                throw new IOException("summary entries can't be read", e);\r
+            }\r
         } finally {\r
             IOUtils.closeQuietly(leis);\r
             IOUtils.closeQuietly(sbis);\r
         }\r
-        sbis = null;\r
         return fsOut;\r
     }\r
 \r
@@ -220,10 +229,11 @@ public class CryptoAPIDecryptor extends Decryptor implements Cloneable {
         return length;\r
     }\r
 \r
+    @Override\r
     public void setChunkSize(int chunkSize) {\r
         this.chunkSize = chunkSize;\r
     }\r
-    \r
+\r
     @Override\r
     public CryptoAPIDecryptor clone() throws CloneNotSupportedException {\r
         return (CryptoAPIDecryptor)super.clone();\r
@@ -240,6 +250,6 @@ public class CryptoAPIDecryptor extends Decryptor implements Cloneable {
         public CryptoAPICipherInputStream(InputStream stream, long size, int initialPos)\r
                 throws GeneralSecurityException {\r
             super(stream, size, chunkSize, initialPos);\r
-        }    \r
+        }\r
     }\r
 }\r
index d20cea0cb4628996ed66f618f4df43291cbf7fc3..5b9e2141e4d09b9eb83f47a20e64262cf7337064 100644 (file)
@@ -131,7 +131,7 @@ public final class ZipPackage extends OPCPackage {
 
         ZipEntrySource ze;
         try {
-            final ZipFile zipFile = ZipHelper.openZipFile(file);
+            final ZipFile zipFile = ZipHelper.openZipFile(file); // NOSONAR
             ze = new ZipFileZipEntrySource(zipFile);
         } catch (IOException e) {
             // probably not happening with write access - not sure how to handle the default read-write access ...
@@ -149,7 +149,7 @@ public final class ZipPackage extends OPCPackage {
         // Acquire a resource that is needed to read the next level of openZipEntrySourceStream
         try {
             // open the file input stream
-            fis = new FileInputStream(file);
+            fis = new FileInputStream(file); // NOSONAR
         } catch (final FileNotFoundException e) {
             // If the source cannot be acquired, abort (no resources to free at this level)
             throw new InvalidOperationException("Can't open the specified file input stream from file: '" + file + "'", e);
@@ -175,7 +175,7 @@ public final class ZipPackage extends OPCPackage {
         // Acquire a resource that is needed to read the next level of openZipEntrySourceStream
         try {
             // open the zip input stream
-            zis = ZipHelper.openZipStream(fis);
+            zis = ZipHelper.openZipStream(fis); // NOSONAR
         } catch (final IOException e) {
             // If the source cannot be acquired, abort (no resources to free at this level)
             throw new InvalidOperationException("Could not open the file input stream", e);