You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by mr...@apache.org on 2026/08/19 15:42:48 UTC
(ofbiz-framework) branch release24.09 updated: Improved: Check path containment before invoking SecuredUpload.isValidFileName in isValidProductImageFileName (#1685)
This is an automated email from the ASF dual-hosted git repository.
mridulpathak pushed a commit to branch release24.09
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
The following commit(s) were added to refs/heads/release24.09 by this push:
new 44fccc4975 Improved: Check path containment before invoking SecuredUpload.isValidFileName in isValidProductImageFileName (#1685)
44fccc4975 is described below
commit 44fccc497526123d592261905bb0d13e92cd5d2b
Author: Mridul Pathak <mr...@gmail.com>
AuthorDate: Wed Aug 19 21:12:43 2026 +0530
Improved: Check path containment before invoking SecuredUpload.isValidFileName in isValidProductImageFileName (#1685)
Backported from trunk (#1684).
---
.../product/imagemanagement/ImageManagementServices.java | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/applications/product/src/main/java/org/apache/ofbiz/product/imagemanagement/ImageManagementServices.java b/applications/product/src/main/java/org/apache/ofbiz/product/imagemanagement/ImageManagementServices.java
index b4ae9875b5..c73cc60a4c 100644
--- a/applications/product/src/main/java/org/apache/ofbiz/product/imagemanagement/ImageManagementServices.java
+++ b/applications/product/src/main/java/org/apache/ofbiz/product/imagemanagement/ImageManagementServices.java
@@ -75,21 +75,25 @@ public class ImageManagementServices {
private static String imagePath;
/**
- * Ensures a user-supplied image file name is safe to use as a rename target: it must pass
+ * Ensures a user-supplied image file name is safe to use as a rename target: it must resolve,
+ * once normalized, directly inside the given product image directory, and must pass
* {@link org.apache.ofbiz.security.SecuredUpload#isValidFileName} (no path separators, no
- * traversal sequences, no denied extensions) and must resolve, once normalized, directly
- * inside the given product image directory.
+ * traversal sequences, no denied extensions). The containment check runs first and only calls
+ * into {@code isValidFileName} once containment is confirmed, because that helper is not
+ * side-effect free: for a denied extension it deletes the file at the supplied path, and an
+ * absolute or traversal path checked before containment would let that delete escape the
+ * product directory entirely.
*/
static boolean isValidProductImageFileName(String fileName, Path resolvedProductDir, Delegator delegator) {
if (UtilValidate.isEmpty(fileName)) {
return false;
}
try {
- if (!org.apache.ofbiz.security.SecuredUpload.isValidFileName(fileName, delegator)) {
+ Path resolvedFilePath = resolvedProductDir.resolve(fileName).normalize();
+ if (resolvedFilePath.getParent() == null || !resolvedFilePath.getParent().equals(resolvedProductDir)) {
return false;
}
- Path resolvedFilePath = resolvedProductDir.resolve(fileName).normalize();
- return resolvedFilePath.getParent() != null && resolvedFilePath.getParent().equals(resolvedProductDir);
+ return org.apache.ofbiz.security.SecuredUpload.isValidFileName(fileName, delegator);
} catch (IOException | InvalidPathException e) {
Debug.logError(e, MODULE);
return false;