Index: src/test/java/org/apache/harmony/luni/tests/java/lang/ProcessBuilderTest.java =================================================================== --- src/test/java/org/apache/harmony/luni/tests/java/lang/ProcessBuilderTest.java (revision 478012) +++ src/test/java/org/apache/harmony/luni/tests/java/lang/ProcessBuilderTest.java (working copy) @@ -90,6 +90,24 @@ env.clear(); env = pb.environment(); assertTrue(env.isEmpty()); + try { + env.put(null,""); + fail("should throw NPE."); + } catch (NullPointerException e) { + // expected; + } + try { + env.put("",null); + fail("should throw NPE."); + } catch (NullPointerException e) { + // expected; + } + try { + env.get(null); + fail("should throw NPE."); + } catch (NullPointerException e) { + // expected; + } } public void testRedirectErrorStream() { Index: src/main/java/java/lang/ProcessBuilder.java =================================================================== --- src/main/java/java/lang/ProcessBuilder.java (revision 478012) +++ src/main/java/java/lang/ProcessBuilder.java (working copy) @@ -66,7 +66,7 @@ throw new NullPointerException(); } this.command = command; - this.environment = new HashMap(System.getenv()); + this.environment = new ProcessHashMap(System.getenv()); } /** @@ -216,4 +216,28 @@ // TODO implement support for redirectErrorStream return process; } + + private class ProcessHashMap extends HashMap { + + private static final long serialVersionUID = 1L; + + public ProcessHashMap(Map env) { + super(env); + } + @Override + public V put(K key, V value) { + if(key == null || value == null){ + throw new NullPointerException(); + } + return super.put(key, value); + } + @Override + public V get(Object key) { + if(key == null){ + throw new NullPointerException(); + } + return super.get(key); + } + } } +