提交 d4c4bd75 编写于 作者: J jrose

8029844: Enhance argument validation

Summary: make defensive copy of a varargs array
Reviewed-by: mchung, twisti, ahgross
上级 93a73bee
...@@ -2070,6 +2070,7 @@ assert((int)twice.invokeExact(21) == 42); ...@@ -2070,6 +2070,7 @@ assert((int)twice.invokeExact(21) == 42);
*/ */
public static public static
MethodHandle permuteArguments(MethodHandle target, MethodType newType, int... reorder) { MethodHandle permuteArguments(MethodHandle target, MethodType newType, int... reorder) {
reorder = reorder.clone();
checkReorder(reorder, newType, target.type()); checkReorder(reorder, newType, target.type());
return target.permuteArguments(newType, reorder); return target.permuteArguments(newType, reorder);
} }
...@@ -2264,6 +2265,7 @@ assertEquals("yz", (String) d0.invokeExact(123, "x", "y", "z")); ...@@ -2264,6 +2265,7 @@ assertEquals("yz", (String) d0.invokeExact(123, "x", "y", "z"));
throw newIllegalArgumentException("no argument type to remove"); throw newIllegalArgumentException("no argument type to remove");
ArrayList<Class<?>> ptypes = new ArrayList<>(oldType.parameterList()); ArrayList<Class<?>> ptypes = new ArrayList<>(oldType.parameterList());
ptypes.addAll(pos, valueTypes); ptypes.addAll(pos, valueTypes);
if (ptypes.size() != inargs) throw newIllegalArgumentException("valueTypes");
MethodType newType = MethodType.methodType(oldType.returnType(), ptypes); MethodType newType = MethodType.methodType(oldType.returnType(), ptypes);
return target.dropArguments(newType, pos, dropped); return target.dropArguments(newType, pos, dropped);
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册