From e50534c1eb7c973f8e738dd016add257573017c2 Mon Sep 17 00:00:00 2001 From: John R Rose Date: Fri, 13 Dec 2013 18:06:31 -0800 Subject: [PATCH] 8029844: Enhance argument validation Make defensive copy of a varargs array Reviewed-by: mchung, twisti, ahgross --- jdk/src/share/classes/java/lang/invoke/MethodHandles.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/jdk/src/share/classes/java/lang/invoke/MethodHandles.java b/jdk/src/share/classes/java/lang/invoke/MethodHandles.java index 57a6f785164..eeb9a4a17d5 100644 --- a/jdk/src/share/classes/java/lang/invoke/MethodHandles.java +++ b/jdk/src/share/classes/java/lang/invoke/MethodHandles.java @@ -2070,6 +2070,7 @@ assert((int)twice.invokeExact(21) == 42); */ public static MethodHandle permuteArguments(MethodHandle target, MethodType newType, int... reorder) { + reorder = reorder.clone(); checkReorder(reorder, newType, target.type()); return target.permuteArguments(newType, reorder); } @@ -2264,6 +2265,7 @@ assertEquals("yz", (String) d0.invokeExact(123, "x", "y", "z")); throw newIllegalArgumentException("no argument type to remove"); ArrayList> ptypes = new ArrayList<>(oldType.parameterList()); ptypes.addAll(pos, valueTypes); + if (ptypes.size() != inargs) throw newIllegalArgumentException("valueTypes"); MethodType newType = MethodType.methodType(oldType.returnType(), ptypes); return target.dropArguments(newType, pos, dropped); }