You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@pdfbox.apache.org by ti...@apache.org on 2019/07/12 14:58:18 UTC
svn commit: r1862981 -
/pdfbox/branches/issue45/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java
Author: tilman
Date: Fri Jul 12 14:58:18 2019
New Revision: 1862981
URL: http://svn.apache.org/viewvc?rev=1862981&view=rev
Log:
PDFBOX-4071: SonarQube fix
Modified:
pdfbox/branches/issue45/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java
Modified: pdfbox/branches/issue45/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java
URL: http://svn.apache.org/viewvc/pdfbox/branches/issue45/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java?rev=1862981&r1=1862980&r2=1862981&view=diff
==============================================================================
--- pdfbox/branches/issue45/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java (original)
+++ pdfbox/branches/issue45/pdfbox/src/main/java/org/apache/pdfbox/pdfparser/COSParser.java Fri Jul 12 14:58:18 2019
@@ -659,7 +659,7 @@ public class COSParser extends BaseParse
}
else if (baseObj instanceof COSArray)
{
- for (COSBase cosBase : ((COSArray) baseObj))
+ for (COSBase cosBase : (COSArray) baseObj)
{
addNewToList(toBeParsedList, cosBase, addedObjects);
}
@@ -694,8 +694,7 @@ public class COSParser extends BaseParse
else
{
// negative offset means we have a compressed
- // object within object stream;
- // get offset of object stream
+ // object within object stream => get offset of object stream
COSObjectKey key = new COSObjectKey((int) -fileOffset, 0);
fileOffset = document.getXrefTable().get(key);
if (fileOffset == null || fileOffset <= 0)
@@ -1036,7 +1035,7 @@ public class COSParser extends BaseParse
{
return null;
}
- COSNumber retVal = null;
+ COSNumber retVal;
// maybe length was given directly
if (lengthBaseObj instanceof COSNumber)
{
@@ -2217,17 +2216,13 @@ public class COSParser extends BaseParse
trailer = xrefTrailerResolver.getTrailer();
getDocument().setTrailer(trailer);
boolean searchForObjStreamsDone = false;
- if (!bfSearchForTrailer(trailer))
+ if (!bfSearchForTrailer(trailer) && !searchForTrailerItems(trailer))
{
- // search for the different parts of the trailer dictionary
- if (!searchForTrailerItems(trailer))
- {
- // root entry wasn't found, maybe it is part of an object stream
- bfSearchForObjStreams();
- searchForObjStreamsDone = true;
- // search again for the root entry
- searchForTrailerItems(trailer);
- }
+ // root entry wasn't found, maybe it is part of an object stream
+ bfSearchForObjStreams();
+ searchForObjStreamsDone = true;
+ // search again for the root entry
+ searchForTrailerItems(trailer);
}
// prepare decryption if necessary
prepareDecryption();
@@ -2240,6 +2235,13 @@ public class COSParser extends BaseParse
return trailer;
}
+ /**
+ * Search for the different parts of the trailer dictionary.
+ *
+ * @param trailer
+ * @return true if the root was found, false if not.
+ * @throws IOException
+ */
private boolean searchForTrailerItems(COSDictionary trailer) throws IOException
{
boolean rootFound = false;
@@ -2884,56 +2886,58 @@ public class COSParser extends BaseParse
* @throws InvalidPasswordException If the password is incorrect.
* @throws IOException if something went wrong
*/
- private void prepareDecryption() throws InvalidPasswordException, IOException
+ private void prepareDecryption() throws IOException
{
- if (encryption == null)
+ if (encryption != null)
{
- COSBase trailerEncryptItem = document.getTrailer().getItem(COSName.ENCRYPT);
- if (trailerEncryptItem != null && !(trailerEncryptItem instanceof COSNull))
- {
- if (trailerEncryptItem instanceof COSObject)
- {
- COSObject trailerEncryptObj = (COSObject) trailerEncryptItem;
- parseDictionaryRecursive(trailerEncryptObj);
- }
- try
- {
- encryption = new PDEncryption(document.getEncryptionDictionary());
- DecryptionMaterial decryptionMaterial;
- if (keyStoreInputStream != null)
- {
- KeyStore ks = KeyStore.getInstance("PKCS12");
- ks.load(keyStoreInputStream, password.toCharArray());
+ return;
+ }
+ COSBase trailerEncryptItem = document.getTrailer().getItem(COSName.ENCRYPT);
+ if (trailerEncryptItem == null || trailerEncryptItem instanceof COSNull)
+ {
+ return;
+ }
- decryptionMaterial = new PublicKeyDecryptionMaterial(ks, keyAlias,
- password);
- }
- else
- {
- decryptionMaterial = new StandardDecryptionMaterial(password);
- }
+ if (trailerEncryptItem instanceof COSObject)
+ {
+ COSObject trailerEncryptObj = (COSObject) trailerEncryptItem;
+ parseDictionaryRecursive(trailerEncryptObj);
+ }
- securityHandler = encryption.getSecurityHandler();
- securityHandler.prepareForDecryption(encryption, document.getDocumentID(),
- decryptionMaterial);
- accessPermission = securityHandler.getCurrentAccessPermission();
- }
- catch (IOException e)
- {
- throw e;
- }
- catch (Exception e)
- {
- throw new IOException("Error (" + e.getClass().getSimpleName()
- + ") while creating security handler for decryption", e);
- }
- finally
- {
- if (keyStoreInputStream != null)
- {
- IOUtils.closeQuietly(keyStoreInputStream);
- }
- }
+ try
+ {
+ encryption = new PDEncryption(document.getEncryptionDictionary());
+ DecryptionMaterial decryptionMaterial;
+ if (keyStoreInputStream != null)
+ {
+ KeyStore ks = KeyStore.getInstance("PKCS12");
+ ks.load(keyStoreInputStream, password.toCharArray());
+ decryptionMaterial = new PublicKeyDecryptionMaterial(ks, keyAlias, password);
+ }
+ else
+ {
+ decryptionMaterial = new StandardDecryptionMaterial(password);
+ }
+
+ securityHandler = encryption.getSecurityHandler();
+ securityHandler.prepareForDecryption(encryption, document.getDocumentID(),
+ decryptionMaterial);
+ accessPermission = securityHandler.getCurrentAccessPermission();
+ }
+ catch (IOException e)
+ {
+ throw e;
+ }
+ catch (Exception e)
+ {
+ throw new IOException("Error (" + e.getClass().getSimpleName()
+ + ") while creating security handler for decryption", e);
+ }
+ finally
+ {
+ if (keyStoreInputStream != null)
+ {
+ IOUtils.closeQuietly(keyStoreInputStream);
}
}
}