This is an automated email from the ASF dual-hosted git repository.

jleroux pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git


The following commit(s) were added to refs/heads/trunk by this push:
     new 47d46886d7 Improved: make sure no pdf files containing unwanted 
attachments can be uploaded (OFBIZ-12926) (#720)
47d46886d7 is described below

commit 47d46886d7de95d439d417af35d1241be0e020cc
Author: originalnichtskoenner 
<143175561+originalnichtskoen...@users.noreply.github.com>
AuthorDate: Mon Mar 4 10:05:35 2024 +0100

    Improved: make sure no pdf files containing unwanted attachments can be 
uploaded (OFBIZ-12926) (#720)
    
    Rejects any uploaded pdf file with more than one attachment, regardless of 
configuration.
---
 .../org/apache/ofbiz/security/SecuredUpload.java   | 46 ++++++++++++----------
 1 file changed, 26 insertions(+), 20 deletions(-)

diff --git 
a/framework/security/src/main/java/org/apache/ofbiz/security/SecuredUpload.java 
b/framework/security/src/main/java/org/apache/ofbiz/security/SecuredUpload.java
index da39164661..38a3ce93a3 100644
--- 
a/framework/security/src/main/java/org/apache/ofbiz/security/SecuredUpload.java
+++ 
b/framework/security/src/main/java/org/apache/ofbiz/security/SecuredUpload.java
@@ -467,33 +467,39 @@ public class SecuredUpload {
     /**
      * @param fileName
      * @return true if it's a safe PDF file: is PDF and does not contains 
embedded files
-     * @throws IOException If there is an error parsing the document
      */
-    private static boolean isValidPdfFile(String fileName) throws IOException {
+    private static boolean isValidPdfFile(String fileName) {
         File file = new File(fileName);
         boolean safeState = false;
         boolean canParse = false;
         try {
-            if ((file != null) && file.exists()) {
-                // Load stream in PDF parser
-                // If the stream is not a PDF then exception will be thrown 
and safe state will be set to FALSE
-                PdfReader reader = new PdfReader(file.getAbsolutePath());
-                // Check 1: detect if the document contains any JavaScript code
-                String jsCode = reader.getJavaScript();
-                if (jsCode == null) {
-                    // OK no JS code, pass to check 2: detect if the document 
has any embedded files
-                    PDEmbeddedFilesNameTreeNode efTree = null;
-                    try (PDDocument pdDocument = PDDocument.load(file)) {
-                        PDDocumentNameDictionary names = new 
PDDocumentNameDictionary(pdDocument.getDocumentCatalog());
-                        efTree = names.getEmbeddedFiles();
-                    }
-                    if (UtilProperties.getPropertyAsBoolean("security", 
"allowZUGFeRDCompliantUpload", false)) {
-                        ZUGFeRDImporter importer = new 
ZUGFeRDImporter(file.getAbsolutePath());
-                        canParse = importer.canParse();
-                    }
-                    safeState = Objects.isNull(efTree) || canParse;
+            if (Objects.isNull(file) || !file.exists()) {
+                return safeState;
+            }
+            // Load stream in PDF parser
+            // If the stream is not a PDF then exception will be thrown and 
safe state will be set to FALSE
+            PdfReader reader = new PdfReader(file.getAbsolutePath());
+            // Check 1: detect if the document contains any JavaScript code
+            String jsCode = reader.getJavaScript();
+            if (!Objects.isNull(jsCode)) {
+                return safeState;
+            }
+            // OK no JS code, pass to check 2: detect if the document has any 
embedded files
+            PDEmbeddedFilesNameTreeNode efTree = null;
+            try (PDDocument pdDocument = PDDocument.load(file)) {
+                PDDocumentNameDictionary names = new 
PDDocumentNameDictionary(pdDocument.getDocumentCatalog());
+                efTree = names.getEmbeddedFiles();
+            }
+            boolean zUGFeRDCompliantUploadAllowed = 
UtilProperties.getPropertyAsBoolean(
+                    "security", "allowZUGFeRDCompliantUpload", false);
+            if (zUGFeRDCompliantUploadAllowed && !Objects.isNull(efTree)) {
+                Integer numberOfEmbeddedFiles = efTree.getNames().size();
+                if (numberOfEmbeddedFiles.equals(1)) {
+                    ZUGFeRDImporter importer = new 
ZUGFeRDImporter(file.getAbsolutePath());
+                    canParse = importer.canParse();
                 }
             }
+            safeState = Objects.isNull(efTree) || canParse;
         } catch (Exception e) {
             safeState = false;
             Debug.logInfo(e, "The file " + file.getAbsolutePath() + " is not a 
valid PDF file. For security reason it's not accepted as a such file",

Reply via email to