diff --git a/src/share/classes/java/util/Collections.java b/src/share/classes/java/util/Collections.java index 20e37dcaed2c13fa1843fc1ca0873b2054235895..4dbdf8a5b41ada6c508fa5f291c1ddc5cdd57cee 100644 --- a/src/share/classes/java/util/Collections.java +++ b/src/share/classes/java/util/Collections.java @@ -3486,6 +3486,7 @@ public class Collections { */ @Override public void replaceAll(UnaryOperator operator) { + Objects.requireNonNull(operator); list.replaceAll(e -> typeCheck(operator.apply(e))); } diff --git a/test/java/util/Collections/CheckedListReplaceAll.java b/test/java/util/Collections/CheckedListReplaceAll.java index 8ac05d095f2e3a95cfd52fd55389d690f2f764e7..19042db24d6b5c5d320615013d9bf31f20e9f20f 100644 --- a/test/java/util/Collections/CheckedListReplaceAll.java +++ b/test/java/util/Collections/CheckedListReplaceAll.java @@ -23,7 +23,7 @@ /* * @test - * @bug 8047795 + * @bug 8047795 8053938 * @summary Ensure that replaceAll operator cannot add bad elements * @author Mike Duigou */ @@ -46,5 +46,16 @@ public class CheckedListReplaceAll { thwarted.printStackTrace(System.out); System.out.println("Curses! Foiled again!"); } + + unwrapped = Arrays.asList(new Object[]{}); // Empty list + wrapped = Collections.checkedList(unwrapped, Integer.class); + try { + wrapped.replaceAll((UnaryOperator)null); + System.out.printf("Bwahaha! I have defeated you! %s\n", wrapped); + throw new RuntimeException("NPE not thrown when passed a null operator"); + } catch (NullPointerException thwarted) { + thwarted.printStackTrace(System.out); + System.out.println("Curses! Foiled again!"); + } } }