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

exceptionfactory 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 a1c2855c0a NIFI-15584 Fixed NPE in DBCPConnectionPool for Dynamic 
Properties with Null Value (#10888)
a1c2855c0a is described below

commit a1c2855c0a4a7548cafac5c6d8b76107ddbf424d
Author: apanczyk <[email protected]>
AuthorDate: Fri Feb 13 21:36:09 2026 +0100

    NIFI-15584 Fixed NPE in DBCPConnectionPool for Dynamic Properties with Null 
Value (#10888)
    
    Signed-off-by: David Handermann <[email protected]>
---
 .../org/apache/nifi/dbcp/DBCPConnectionPool.java   |  1 +
 .../java/org/apache/nifi/dbcp/DBCPServiceTest.java | 31 ++++++++++++++++++++++
 2 files changed, 32 insertions(+)

diff --git 
a/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/main/java/org/apache/nifi/dbcp/DBCPConnectionPool.java
 
b/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/main/java/org/apache/nifi/dbcp/DBCPConnectionPool.java
index 990f6c1c19..f6c8176e18 100644
--- 
a/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/main/java/org/apache/nifi/dbcp/DBCPConnectionPool.java
+++ 
b/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/main/java/org/apache/nifi/dbcp/DBCPConnectionPool.java
@@ -223,6 +223,7 @@ public class DBCPConnectionPool extends 
AbstractDBCPConnectionPool implements DB
                         return new 
AbstractMap.SimpleEntry<>(descriptor.getName(), 
propertyValue.evaluateAttributeExpressions().getValue());
                     }
                 })
+                .filter(entry -> entry.getValue() != null)
                 .collect(Collectors.toMap(AbstractMap.SimpleEntry::getKey, 
AbstractMap.SimpleEntry::getValue));
     }
 
diff --git 
a/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/test/java/org/apache/nifi/dbcp/DBCPServiceTest.java
 
b/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/test/java/org/apache/nifi/dbcp/DBCPServiceTest.java
index a1a108cfea..565ff50dc4 100644
--- 
a/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/test/java/org/apache/nifi/dbcp/DBCPServiceTest.java
+++ 
b/nifi-extension-bundles/nifi-standard-services/nifi-dbcp-service-bundle/nifi-dbcp-service/src/test/java/org/apache/nifi/dbcp/DBCPServiceTest.java
@@ -17,10 +17,14 @@
 package org.apache.nifi.dbcp;
 
 import org.apache.nifi.components.ConfigVerificationResult;
+import org.apache.nifi.components.PropertyDescriptor;
 import org.apache.nifi.components.ValidationResult;
 import org.apache.nifi.dbcp.utils.DBCPProperties;
+import org.apache.nifi.expression.ExpressionLanguageScope;
 import org.apache.nifi.processor.exception.ProcessException;
+import org.apache.nifi.processor.util.StandardValidators;
 import org.apache.nifi.reporting.InitializationException;
+import org.apache.nifi.util.MockConfigurationContext;
 import org.apache.nifi.util.MockPropertyConfiguration;
 import org.apache.nifi.util.NoOpProcessor;
 import org.apache.nifi.util.PropertyMigrationResult;
@@ -42,6 +46,7 @@ import java.sql.SQLException;
 import java.sql.Statement;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.LinkedHashMap;
 import java.util.Map;
 import java.util.Set;
 
@@ -122,6 +127,32 @@ public class DBCPServiceTest {
         assertTrue(e.getMessage().contains("Duplicate"));
     }
 
+    @Test
+    public void testGetConnectionPropertiesWithNullDynamicPropertyValue() {
+        final PropertyDescriptor dynamicProperty = new 
PropertyDescriptor.Builder()
+            .name("nullProperty")
+            .dynamic(true)
+            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .expressionLanguageSupported(ExpressionLanguageScope.ENVIRONMENT)
+            .build();
+        final PropertyDescriptor sensitiveDynamicProperty = new 
PropertyDescriptor.Builder()
+            .name("SENSITIVE.nullProperty")
+            .dynamic(true)
+            .sensitive(true)
+            .addValidator(StandardValidators.NON_EMPTY_VALIDATOR)
+            .expressionLanguageSupported(ExpressionLanguageScope.NONE)
+            .build();
+
+        final Map<PropertyDescriptor, String> properties = new 
LinkedHashMap<>();
+        properties.put(dynamicProperty, null);
+        properties.put(sensitiveDynamicProperty, null);
+
+        final MockConfigurationContext configurationContext = new 
MockConfigurationContext(service, properties, null, Map.of());
+        final Map<String, String> connectionProperties = 
service.getConnectionProperties(configurationContext);
+
+        assertTrue(connectionProperties.isEmpty());
+    }
+
     @Test
     public void testGetConnectionExecuteStatements() throws SQLException {
         runner.enableControllerService(service);

Reply via email to