You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2016/05/17 23:34:52 UTC
svn commit: r1744332 - in /poi/trunk/src: java/org/apache/poi/poifs/crypt/
java/org/apache/poi/poifs/crypt/standard/ ooxml/java/org/apache/poi/util/
ooxml/java/org/apache/poi/xssf/streaming/
Author: kiwiwings
Date: Tue May 17 23:34:52 2016
New Revision: 1744332
URL: http://svn.apache.org/viewvc?rev=1744332&view=rev
Log:
findbugs fixes
Modified:
poi/trunk/src/java/org/apache/poi/poifs/crypt/ChunkedCipherOutputStream.java
poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptor.java
poi/trunk/src/ooxml/java/org/apache/poi/util/OOXMLLite.java
poi/trunk/src/ooxml/java/org/apache/poi/util/XmlSort.java
poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java
Modified: poi/trunk/src/java/org/apache/poi/poifs/crypt/ChunkedCipherOutputStream.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/crypt/ChunkedCipherOutputStream.java?rev=1744332&r1=1744331&r2=1744332&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/crypt/ChunkedCipherOutputStream.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/crypt/ChunkedCipherOutputStream.java Tue May 17 23:34:52 2016
@@ -35,10 +35,14 @@ import org.apache.poi.poifs.filesystem.P
import org.apache.poi.util.Internal;
import org.apache.poi.util.LittleEndian;
import org.apache.poi.util.LittleEndianConsts;
+import org.apache.poi.util.POILogFactory;
+import org.apache.poi.util.POILogger;
import org.apache.poi.util.TempFile;
@Internal
public abstract class ChunkedCipherOutputStream extends FilterOutputStream {
+ private static final POILogger logger = POILogFactory.getLogger(ChunkedCipherOutputStream.class);
+
protected final int chunkSize;
protected final int chunkMask;
protected final int chunkBits;
@@ -67,9 +71,11 @@ public abstract class ChunkedCipherOutpu
protected abstract Cipher initCipherForBlock(Cipher existing, int block, boolean lastChunk)
throws GeneralSecurityException;
+ @SuppressWarnings("hiding")
protected abstract void calculateChecksum(File fileOut, int oleStreamSize)
throws GeneralSecurityException, IOException;
+ @SuppressWarnings("hiding")
protected abstract void createEncryptionInfoEntry(DirectoryNode dir, File tmpFile)
throws IOException, GeneralSecurityException;
@@ -164,7 +170,9 @@ public abstract class ChunkedCipherOutpu
os.close();
- fileOut.delete();
+ if (!fileOut.delete()) {
+ logger.log(POILogger.ERROR, "Can't delete temporary encryption file: "+fileOut);
+ }
} catch (IOException e) {
throw new EncryptedDocumentException(e);
}
Modified: poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptor.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptor.java?rev=1744332&r1=1744331&r2=1744332&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptor.java (original)
+++ poi/trunk/src/java/org/apache/poi/poifs/crypt/standard/StandardEncryptor.java Tue May 17 23:34:52 2016
@@ -49,9 +49,13 @@ import org.apache.poi.util.IOUtils;
import org.apache.poi.util.LittleEndianByteArrayOutputStream;
import org.apache.poi.util.LittleEndianConsts;
import org.apache.poi.util.LittleEndianOutputStream;
+import org.apache.poi.util.POILogFactory;
+import org.apache.poi.util.POILogger;
import org.apache.poi.util.TempFile;
public class StandardEncryptor extends Encryptor {
+ private static final POILogger logger = POILogFactory.getLogger(StandardEncryptor.class);
+
private final StandardEncryptionInfoBuilder builder;
protected StandardEncryptor(StandardEncryptionInfoBuilder builder) {
@@ -184,7 +188,9 @@ public class StandardEncryptor extends E
FileInputStream fis = new FileInputStream(fileOut);
IOUtils.copy(fis, leos);
fis.close();
- fileOut.delete();
+ if (!fileOut.delete()) {
+ logger.log(POILogger.ERROR, "Can't delete temporary encryption file: "+fileOut);
+ }
leos.close();
} catch (IOException e) {
Modified: poi/trunk/src/ooxml/java/org/apache/poi/util/OOXMLLite.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/util/OOXMLLite.java?rev=1744332&r1=1744331&r2=1744332&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/util/OOXMLLite.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/util/OOXMLLite.java Tue May 17 23:34:52 2016
@@ -278,7 +278,10 @@ public final class OOXMLLite {
private static void copyFile(InputStream srcStream, File destFile) throws IOException {
File destDirectory = destFile.getParentFile();
- destDirectory.mkdirs();
+ if (!(destDirectory.exists() || destDirectory.mkdirs())) {
+ throw new RuntimeException("Can't create destination directory: "+destDirectory);
+ }
+ ;
OutputStream destStream = new FileOutputStream(destFile);
try {
IOUtils.copy(srcStream, destStream);
Modified: poi/trunk/src/ooxml/java/org/apache/poi/util/XmlSort.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/util/XmlSort.java?rev=1744332&r1=1744331&r2=1744332&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/util/XmlSort.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/util/XmlSort.java Tue May 17 23:34:52 2016
@@ -17,83 +17,12 @@
package org.apache.poi.util;
-import static org.apache.poi.POIXMLTypeLoader.DEFAULT_XML_OPTIONS;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.Serializable;
import java.util.Comparator;
-import javax.xml.namespace.QName;
-
import org.apache.xmlbeans.XmlCursor;
-import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
-/**
- */
-public final class XmlSort
-{
- /**
- * Receives an XML element instance and sorts the children of this
- * element in lexicographical (by default) order.
- *
- * @param args An array in which the first item is a
- * path to the XML instance file and the second item (optional) is
- * an XPath inside the document identifying the element to be sorted
- */
- public static void main(String[] args)
- {
- if (args.length < 1 || args.length > 2)
- {
- System.out.println(" java XmlSort <XML_File> [<XPath>]");
- return;
- }
- File f = new File(args[0]);
- try
- {
- XmlObject docInstance = XmlObject.Factory.parse(f, DEFAULT_XML_OPTIONS);
- XmlObject element = null;
- if (args.length > 1)
- {
- String xpath = args[1];
- XmlObject[] result = docInstance.selectPath(xpath);
- if (result.length == 0)
- {
- System.out.println("ERROR: XPath \"" + xpath + "\" did not return any results");
- }
- else if (result.length > 1)
- {
- System.out.println("ERROR: XPath \"" + xpath + "\" returned more than one " +
- "node (" + result.length + ")");
- }
- else
- element = result[0];
- }
- else
- {
- // Navigate to the root element
- XmlCursor c = docInstance.newCursor();
- c.toFirstChild();
- element = c.getObject();
- c.dispose();
- }
- if (element != null)
- sort(element, new QNameComparator(QNameComparator.ASCENDING));
- System.out.println(docInstance.xmlText());
- }
- catch (IOException ioe)
- {
- System.out.println("ERROR: Could not open file: \"" + args[0] + "\": " +
- ioe.getMessage());
- }
- catch (XmlException xe)
- {
- System.out.println("ERROR: Could not parse file: \"" + args[0] + "\": " +
- xe.getMessage());
- }
- }
-
+public final class XmlSort {
/**
* Sorts the children of <code>element</code> according to the order indicated by the
* comparator.
@@ -108,11 +37,11 @@ public final class XmlSort
* @throws IllegalArgumentException if the input <code>XmlObject</code> does not represent
* an element
*/
- public static void sort(XmlObject element, Comparator<XmlCursor> comp)
- {
+ public static void sort(XmlObject element, Comparator<XmlCursor> comp) {
XmlCursor headCursor = element.newCursor();
- if (!headCursor.isStart())
+ if (!headCursor.isStart()) {
throw new IllegalStateException("The element parameter must point to a STARTDOC");
+ }
// We use insertion sort to minimize the number of swaps, because each swap means
// moving a part of the document
/* headCursor points to the beginning of the list of the already sorted items and
@@ -121,44 +50,21 @@ public final class XmlSort
second element. The algorithm ends when listCursor cannot be moved to the "next"
element in the unsorted list, i.e. the unsorted list becomes empty */
boolean moved = headCursor.toFirstChild();
- if (!moved)
- {
+ if (!moved) {
// Cursor was not moved, which means that the given element has no children and
// therefore there is nothing to sort
return;
}
XmlCursor listCursor = headCursor.newCursor();
boolean moreElements = listCursor.toNextSibling();
- while (moreElements)
- {
+ while (moreElements) {
moved = false;
// While we can move the head of the unsorted list, it means that there are still
// items (elements) that need to be sorted
- while (headCursor.comparePosition(listCursor) < 0)
- {
- if (comp.compare(headCursor, listCursor) > 0)
- {
+ while (headCursor.comparePosition(listCursor) < 0) {
+ if (comp.compare(headCursor, listCursor) > 0) {
// We have found the position in the sorted list, insert the element and the
// text following the element in the current position
- /*
- * Uncomment this code to cause the text before the element to move along
- * with the element, rather than the text after the element. Notice that this
- * is more difficult to do, because the cursor's "type" refers to the position
- * to the right of the cursor, so to get the type of the token to the left, the
- * cursor needs to be first moved to the left (previous token)
- *
- headCursor.toPrevToken();
- while (headCursor.isComment() || headCursor.isProcinst() || headCursor.isText())
- headCursor.toPrevToken();
- headCursor.toNextToken();
- listCursor.toPrevToken();
- while (listCursor.isComment() || listCursor.isProcinst() || listCursor.isText())
- listCursor.toPrevToken();
- listCursor.toNextToken();
- while (!listCursor.isStart())
- listCursor.moveXml(headCursor);
- listCursor.moveXml(headCursor);
- */
// Move the element
listCursor.moveXml(headCursor);
// Move the text following the element
@@ -170,8 +76,7 @@ public final class XmlSort
}
headCursor.toNextSibling();
}
- if (!moved)
- {
+ if (!moved) {
// Because during the move of a fragment of XML, the listCursor is also moved, in
// case we didn't need to move XML (the new element to be inserted happened to
// be the last one in order), we need to move this cursor
@@ -182,40 +87,5 @@ public final class XmlSort
headCursor.toFirstChild();
}
}
-
- /**
- * Implements a <code>java.util.Comparator</code> for comparing <code>QName</code>values.
- * The namespace URIs are compared first and if they are equal, the local parts are compared.
- * <p/>
- * The constructor accepts an argument indicating whether the comparison order is the same as
- * the lexicographic order of the strings or the reverse.
- */
- public static final class QNameComparator implements Comparator<XmlCursor>, Serializable
- {
- public static final int ASCENDING = 1;
- public static final int DESCENDING = 2;
-
- private int order;
-
- public QNameComparator(int order)
- {
- this.order = order;
- if (order != ASCENDING && order != DESCENDING)
- throw new IllegalArgumentException("Please specify one of ASCENDING or DESCENDING "+
- "comparison orders");
- }
-
- public int compare(XmlCursor cursor1, XmlCursor cursor2) {
- QName qname1 = cursor1.getName();
- QName qname2 = cursor2.getName();
- int qnameComparisonRes = qname1.getNamespaceURI().compareTo(qname2.getNamespaceURI());
- if (qnameComparisonRes == 0)
- return order == ASCENDING ?
- qname1.getLocalPart().compareTo(qname2.getLocalPart()) :
- -qname1.getLocalPart().compareTo(qname2.getLocalPart());
- else
- return order == ASCENDING ? qnameComparisonRes : -qnameComparisonRes;
- }
- }
}
\ No newline at end of file
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java?rev=1744332&r1=1744331&r2=1744332&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/streaming/SheetDataWriter.java Tue May 17 23:34:52 2016
@@ -33,6 +33,8 @@ import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.FormulaError;
import org.apache.poi.ss.util.CellReference;
+import org.apache.poi.util.POILogFactory;
+import org.apache.poi.util.POILogger;
import org.apache.poi.util.TempFile;
import org.apache.poi.xssf.model.SharedStringsTable;
import org.apache.poi.xssf.usermodel.XSSFRichTextString;
@@ -45,6 +47,8 @@ import org.openxmlformats.schemas.spread
* so that it was renamed to "SheetDataWriter"
*/
public class SheetDataWriter {
+ private static final POILogger logger = POILogFactory.getLogger(SheetDataWriter.class);
+
private final File _fd;
private final Writer _out;
private int _rownum;
@@ -128,7 +132,9 @@ public class SheetDataWriter {
@Override
protected void finalize() throws Throwable {
- _fd.delete();
+ if (!_fd.delete()) {
+ logger.log(POILogger.ERROR, "Can't delete temporary encryption file: "+_fd);
+ }
super.finalize();
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org