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

pvillard pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/nifi.git


The following commit(s) were added to refs/heads/main by this push:
     new 6a53010390 NIFI-10002 Validated Directory Path in ListFile
6a53010390 is described below

commit 6a53010390da4a3005ab7904517cf10f725bcbb0
Author: exceptionfactory <[email protected]>
AuthorDate: Tue Oct 15 22:04:48 2024 -0500

    NIFI-10002 Validated Directory Path in ListFile
    
    - Throw IOException for null or blank directories to avoid invalid 
directory expressions
    
    Signed-off-by: Pierre Villard <[email protected]>
    
    This closes #9393.
---
 .../org/apache/nifi/processors/standard/ListFile.java    |  7 ++++++-
 .../apache/nifi/processors/standard/TestListFile.java    | 16 ++++++++++++++++
 2 files changed, 22 insertions(+), 1 deletion(-)

diff --git 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListFile.java
 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListFile.java
index 2f461da48e..a21fb25bba 100644
--- 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListFile.java
+++ 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListFile.java
@@ -506,7 +506,12 @@ public class ListFile extends 
AbstractListProcessor<FileInfo> {
 
     private List<FileInfo> performListing(final ProcessContext context, final 
Long minTimestamp, final ListingMode listingMode, final boolean applyFilters)
             throws IOException {
-        final Path basePath = new File(getPath(context)).toPath();
+        final String evaluatedPath = getPath(context);
+        if (evaluatedPath == null || evaluatedPath.isBlank()) {
+            throw new IOException("Blank Directory is not valid: review 
configured expression for Directory property");
+        }
+
+        final Path basePath = new File(evaluatedPath).toPath();
         final Boolean recurse = context.getProperty(RECURSE).asBoolean();
         final Map<Path, BasicFileAttributes> lastModifiedMap = new HashMap<>();
 
diff --git 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListFile.java
 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListFile.java
index 4d605217c3..391c02facb 100644
--- 
a/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListFile.java
+++ 
b/nifi-extension-bundles/nifi-standard-bundle/nifi-standard-processors/src/test/java/org/apache/nifi/processors/standard/TestListFile.java
@@ -27,6 +27,8 @@ import org.apache.nifi.processor.ProcessContext;
 import org.apache.nifi.processor.util.list.AbstractListProcessor;
 import org.apache.nifi.processor.util.list.ListProcessorTestWatcher;
 import org.apache.nifi.processor.util.file.transfer.FileInfo;
+import org.apache.nifi.util.LogMessage;
+import org.apache.nifi.util.MockComponentLog;
 import org.apache.nifi.util.MockFlowFile;
 import org.apache.nifi.util.TestRunner;
 import org.apache.nifi.util.TestRunners;
@@ -161,6 +163,20 @@ public class TestListFile {
         assertEquals("/dir/test2", processor.getPath(context));
     }
 
+    @Test
+    public void testPerformListingBlankDirectoryFailed() throws Exception {
+        runner.setProperty(ListFile.DIRECTORY, "${literal('')}");
+        runNext();
+        runner.assertTransferCount(ListFile.REL_SUCCESS, 0);
+
+        final MockComponentLog logger = runner.getLogger();
+        final List<LogMessage> errorMessages = logger.getErrorMessages();
+        assertFalse(errorMessages.isEmpty());
+
+        final LogMessage firstLogMessage = errorMessages.getFirst();
+        assertTrue(firstLogMessage.getMsg().contains("Blank"));
+    }
+
     @Test
     public void testPerformListing() throws Exception {
 

Reply via email to