HADOOP-12117. Potential NPE from Configuration#loadProperty with allowNullValueProperties set. (Contributed by zhihai xu)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/d1d98a66 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/d1d98a66 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/d1d98a66 Branch: refs/heads/YARN-2928 Commit: d1d98a666d75f3c9fc3470ede6cb3c710d2c50e7 Parents: af51cbb Author: Vinayakumar B <[email protected]> Authored: Tue Jul 7 16:11:27 2015 +0530 Committer: Zhijie Shen <[email protected]> Committed: Mon Jul 13 11:43:26 2015 -0700 ---------------------------------------------------------------------- hadoop-common-project/hadoop-common/CHANGES.txt | 3 +++ .../java/org/apache/hadoop/conf/Configuration.java | 8 ++++---- .../org/apache/hadoop/conf/TestConfiguration.java | 15 +++++++++++++++ 3 files changed, 22 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/d1d98a66/hadoop-common-project/hadoop-common/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/CHANGES.txt b/hadoop-common-project/hadoop-common/CHANGES.txt index faf5a5c..5d11db9 100644 --- a/hadoop-common-project/hadoop-common/CHANGES.txt +++ b/hadoop-common-project/hadoop-common/CHANGES.txt @@ -933,6 +933,9 @@ Release 2.8.0 - UNRELEASED HADOOP-12186. ActiveStandbyElector shouldn't call monitorLockNodeAsync multiple times (zhihai xu via vinayakumarb) + HADOOP-12117. Potential NPE from Configuration#loadProperty with + allowNullValueProperties set. (zhihai xu via vinayakumarb) + Release 2.7.2 - UNRELEASED INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/d1d98a66/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java index 54e07c6..0b45429 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/conf/Configuration.java @@ -2735,14 +2735,14 @@ public class Configuration implements Iterable<Map.Entry<String,String>>, to.put(entry.getKey(), entry.getValue()); } } - + private void loadProperty(Properties properties, String name, String attr, String value, boolean finalParameter, String[] source) { if (value != null || allowNullValueProperties) { + if (value == null) { + value = DEFAULT_STRING_CHECK; + } if (!finalParameters.contains(attr)) { - if (value==null && allowNullValueProperties) { - value = DEFAULT_STRING_CHECK; - } properties.setProperty(attr, value); if(source != null) { updatingResource.put(attr, source); http://git-wip-us.apache.org/repos/asf/hadoop/blob/d1d98a66/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java ---------------------------------------------------------------------- diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java index ec6c964..a039741 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/conf/TestConfiguration.java @@ -42,6 +42,7 @@ import static java.util.concurrent.TimeUnit.*; import junit.framework.TestCase; import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.fail; import org.apache.commons.lang.StringUtils; import org.apache.hadoop.conf.Configuration.IntegerRanges; @@ -49,6 +50,7 @@ import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; import org.apache.hadoop.net.NetUtils; import static org.apache.hadoop.util.PlatformName.IBM_JAVA; + import org.codehaus.jackson.map.ObjectMapper; import org.mockito.Mockito; @@ -1511,6 +1513,19 @@ public class TestConfiguration extends TestCase { // it's expected behaviour. } + public void testNullValueProperties() throws Exception { + Configuration conf = new Configuration(); + conf.setAllowNullValueProperties(true); + out = new BufferedWriter(new FileWriter(CONFIG)); + startConfig(); + appendProperty("attr", "value", true); + appendProperty("attr", "", true); + endConfig(); + Path fileResource = new Path(CONFIG); + conf.addResource(fileResource); + assertEquals("value", conf.get("attr")); + } + public static void main(String[] argv) throws Exception { junit.textui.TestRunner.main(new String[]{ TestConfiguration.class.getName()
