You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@flink.apache.org by uc...@apache.org on 2016/08/16 10:40:45 UTC

flink git commit: [FLINK-4309] Fix potential NPE in DelegatingConfiguration

Repository: flink
Updated Branches:
  refs/heads/master 5ccd90715 -> ad3454069


[FLINK-4309] Fix potential NPE in DelegatingConfiguration

This closes #2371.


Project: http://git-wip-us.apache.org/repos/asf/flink/repo
Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/ad345406
Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/ad345406
Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/ad345406

Branch: refs/heads/master
Commit: ad3454069fa091cd453f6cefb0e56a8021a3c269
Parents: 5ccd907
Author: Sunny T <su...@Sunnys-MacBook-Pro-3.local>
Authored: Sun Aug 14 15:50:08 2016 -0700
Committer: Ufuk Celebi <uc...@apache.org>
Committed: Tue Aug 16 12:39:42 2016 +0200

----------------------------------------------------------------------
 .../configuration/DelegatingConfiguration.java  | 12 ++++--
 .../DelegatingConfigurationTest.java            | 45 ++++++++++++++++++++
 2 files changed, 54 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flink/blob/ad345406/flink-core/src/main/java/org/apache/flink/configuration/DelegatingConfiguration.java
----------------------------------------------------------------------
diff --git a/flink-core/src/main/java/org/apache/flink/configuration/DelegatingConfiguration.java b/flink-core/src/main/java/org/apache/flink/configuration/DelegatingConfiguration.java
index 91f81d4..dba77f3 100644
--- a/flink-core/src/main/java/org/apache/flink/configuration/DelegatingConfiguration.java
+++ b/flink-core/src/main/java/org/apache/flink/configuration/DelegatingConfiguration.java
@@ -19,6 +19,7 @@ package org.apache.flink.configuration;
 
 import org.apache.flink.core.memory.DataInputView;
 import org.apache.flink.core.memory.DataOutputView;
+import org.apache.flink.util.Preconditions;
 
 import java.io.IOException;
 import java.util.HashSet;
@@ -56,7 +57,7 @@ public final class DelegatingConfiguration extends Configuration {
 	 */
 	public DelegatingConfiguration(Configuration backingConfig, String prefix)
 	{
-		this.backingConfig = backingConfig;
+		this.backingConfig = Preconditions.checkNotNull(backingConfig);
 		this.prefix = prefix;
 	}
 
@@ -178,14 +179,19 @@ public final class DelegatingConfiguration extends Configuration {
 
 	@Override
 	public Set<String> keySet() {
+		if (this.prefix == null) {
+			return this.backingConfig.keySet();
+		}
+
 		final HashSet<String> set = new HashSet<String>();
-		final int prefixLen = this.prefix == null ? 0 : this.prefix.length();
+		int prefixLen = this.prefix.length();
 
 		for (String key : this.backingConfig.keySet()) {
-			if (key.startsWith(this.prefix)) {
+			if (key.startsWith(prefix)) {
 				set.add(key.substring(prefixLen));
 			}
 		}
+
 		return set;
 	}
 

http://git-wip-us.apache.org/repos/asf/flink/blob/ad345406/flink-core/src/test/java/org/apache/flink/configuration/DelegatingConfigurationTest.java
----------------------------------------------------------------------
diff --git a/flink-core/src/test/java/org/apache/flink/configuration/DelegatingConfigurationTest.java b/flink-core/src/test/java/org/apache/flink/configuration/DelegatingConfigurationTest.java
index 6d42129..d8b782d 100644
--- a/flink-core/src/test/java/org/apache/flink/configuration/DelegatingConfigurationTest.java
+++ b/flink-core/src/test/java/org/apache/flink/configuration/DelegatingConfigurationTest.java
@@ -26,8 +26,10 @@ import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.Arrays;
 import java.util.Comparator;
+import java.util.Set;
 
 import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
 
 
 public class DelegatingConfigurationTest {
@@ -88,4 +90,47 @@ public class DelegatingConfigurationTest {
 			assertTrue("Foo method '" + configurationMethod.getName() + "' has not been wrapped correctly in DelegatingConfiguration wrapper", hasMethod);
 		}
 	}
+	
+	@Test
+	public void testDelegationConfigurationWithNullPrefix() {
+		Configuration backingConf = new Configuration();
+		backingConf.setValueInternal("test-key", "value");
+
+		DelegatingConfiguration configuration = new DelegatingConfiguration(
+				backingConf, null);
+		Set<String> keySet = configuration.keySet();
+
+		assertEquals(keySet, backingConf.keySet());
+
+	}
+
+	@Test
+	public void testDelegationConfigurationWithPrefix() {
+		String prefix = "pref-";
+		String expectedKey = "key";
+
+		/*
+		 * Key matches the prefix
+		 */
+		Configuration backingConf = new Configuration();
+		backingConf.setValueInternal(prefix + expectedKey, "value");
+
+		DelegatingConfiguration configuration = new DelegatingConfiguration(backingConf, prefix);
+		Set<String> keySet = configuration.keySet();
+		
+
+		assertEquals(keySet.size(), 1);
+		assertEquals(keySet.iterator().next(), expectedKey);
+
+		/*
+		 * Key does not match the prefix
+		 */
+		backingConf = new Configuration();
+		backingConf.setValueInternal("test-key", "value");
+
+		configuration = new DelegatingConfiguration(backingConf, prefix);
+		keySet = configuration.keySet();
+
+		assertTrue(keySet.isEmpty());
+	}
 }