RFR: 8331724: Refactor j.l.constant implementation to internal package [v5]

Claes Redestad redestad at openjdk.org
Wed May 8 20:20:53 UTC 2024


On Wed, 8 May 2024 19:06:35 GMT, ExE Boss <duke at openjdk.org> wrote:

>> Claes Redestad has updated the pull request incrementally with one additional commit since the last revision:
>> 
>>   Refactor to further avoid re-validating arguments
>
> src/java.base/share/classes/jdk/internal/constant/MethodTypeDescImpl.java line 179:
> 
>> 177: 
>> 178:         for (ClassDesc param : paramTypes)
>> 179:             validateArgument(param);
> 
> This check should be performed as part of copying `paramTypes` to `newArgs` to avoid TOC/TOU issues, e.g.:
> 
> @Override
> public MethodTypeDesc insertParameterTypes(int pos, ClassDesc... paramTypes) {
> 	if (pos < 0 || pos > argTypes.length)
> 		throw new IndexOutOfBoundsException(pos);
> 
> 	ClassDesc[] newArgs = new ClassDesc[argTypes.length + paramTypes.length];
> 	if (pos > 0) {
> 		System.arraycopy(argTypes, 0, newArgs, 0, pos);
> 	}
> 	for (int i = 0; i < paramTypes.length; i++) {
> 		newArgs[pos + i] = validateArgument(paramTypes[i]);
> 	}
> 	if (pos < argTypes.length) {
> 		System.arraycopy(argTypes, pos, newArgs, pos + paramTypes.length, argTypes.length - pos);
> 	}
> 	return ofValidated(returnType, newArgs);
> }
> 
> 
> See also:
> https://github.com/openjdk/jdk/blob/230fac80f25e9608006c8928a8a7708bf13a818c/src/java.base/share/classes/java/util/ImmutableCollections.java#L186-L195

Nice catch! I conservatively just move the validation loop after to keep the arraycopying.

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/19105#discussion_r1594579344


More information about the core-libs-dev mailing list