diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Apps.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Apps.java index cf3940f..aee8471 100644 --- hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Apps.java +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/util/Apps.java @@ -76,7 +76,11 @@ public static void setEnvFromInputString(Map env, String childEnvs[] = envString.split(","); Pattern p = Pattern.compile(Shell.getEnvironmentVariableRegex()); for (String cEnv : childEnvs) { - String[] parts = cEnv.split("="); // split on '=' + String[] parts = cEnv.split("=", -1); // split on '=' + if (parts.length != 2) { + // skip bad environment variable. + continue; + } Matcher m = p.matcher(parts[1]); StringBuffer sb = new StringBuffer(); while (m.find()) { diff --git hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/TestApps.java hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/TestApps.java new file mode 100644 index 0000000..03891a1 --- /dev/null +++ hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/test/java/org/apache/hadoop/yarn/util/TestApps.java @@ -0,0 +1,39 @@ +/** +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ +package org.apache.hadoop.yarn.util; + +import static org.junit.Assert.assertEquals; + +import java.io.File; +import java.util.HashMap; +import java.util.Map; + +import org.junit.Test; + +public class TestApps { + @Test + public void testSetEnvFromInputString() { + Map environment = new HashMap(); + String test = "1=a,2=b,3=,4=c"; + Apps.setEnvFromInputString(environment, test, File.pathSeparator); + assertEquals(environment.get("1"), "a"); + assertEquals(environment.get("2"), "b"); + assertEquals(environment.get("3"), ""); + assertEquals(environment.get("4"), "c"); + } +}