From 668ace5da74de648b23d5ba287071bd251d69f01 Mon Sep 17 00:00:00 2001 From: chegar Date: Wed, 30 Jul 2014 17:42:18 +0100 Subject: [PATCH] 8053938: Collections.checkedList(empty list).replaceAll((UnaryOperator)null) doesn't throw NPE after JDK-8047795 Reviewed-by: rriggs, mduigou --- src/share/classes/java/util/Collections.java | 1 + .../util/Collections/CheckedListReplaceAll.java | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/share/classes/java/util/Collections.java b/src/share/classes/java/util/Collections.java index 20e37dcae..4dbdf8a5b 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 8ac05d095..19042db24 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!"); + } } } -- GitLab