Skip to content

Commit ec50316

Browse files
committed
Adds safety for illegally compiled parameters.
1 parent e720b5e commit ec50316

File tree

3 files changed

+34
-5
lines changed

3 files changed

+34
-5
lines changed

byte-buddy-dep/src/main/java/net/bytebuddy/asm/Advice.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10612,7 +10612,7 @@ protected void propagateHandler(Label label) {
1061210612
}
1061310613

1061410614
@Override
10615-
public void visitParameter(String name, int modifiers) {
10615+
public void visitParameter(@MaybeNull String name, int modifiers) {
1061610616
/* do nothing */
1061710617
}
1061810618

byte-buddy-dep/src/main/java/net/bytebuddy/description/method/ParameterDescription.java

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import net.bytebuddy.utility.dispatcher.JavaDispatcher;
3434
import net.bytebuddy.utility.nullability.AlwaysNull;
3535
import net.bytebuddy.utility.nullability.MaybeNull;
36+
import org.objectweb.asm.Opcodes;
3637

3738
import java.lang.annotation.Annotation;
3839
import java.lang.reflect.AccessibleObject;
@@ -230,6 +231,13 @@ public String toString() {
230231
*/
231232
abstract class ForLoadedParameter<T extends AccessibleObject> extends InDefinedShape.AbstractBase {
232233

234+
/**
235+
* The name of the {@code java.lang.reflect.MalformedParametersException}. Due to compiler bugs, parameter
236+
* declarations might not always be legal, and by checking for this exception, one can trigger a fallback
237+
* behaviour.
238+
*/
239+
private static final String MALFORMED_PARAMETERS_EXCEPTION = "java.lang.reflect.MalformedParametersException";
240+
233241
/**
234242
* A dispatcher for reading properties from {@code java.lang.reflect.Parameter} instances.
235243
*/
@@ -279,7 +287,14 @@ private static <T> T doPrivileged(PrivilegedAction<T> action) {
279287
* {@inheritDoc}
280288
*/
281289
public String getName() {
282-
return PARAMETER.getName(ParameterList.ForLoadedExecutable.EXECUTABLE.getParameters(executable)[index]);
290+
try {
291+
return PARAMETER.getName(ParameterList.ForLoadedExecutable.EXECUTABLE.getParameters(executable)[index]);
292+
} catch (RuntimeException exception) {
293+
if (exception.getClass().getName().equals(MALFORMED_PARAMETERS_EXCEPTION)) {
294+
return super.getName();
295+
}
296+
throw exception;
297+
}
283298
}
284299

285300
/**
@@ -293,14 +308,28 @@ public int getIndex() {
293308
* {@inheritDoc}
294309
*/
295310
public boolean isNamed() {
296-
return PARAMETER.isNamePresent(ParameterList.ForLoadedExecutable.EXECUTABLE.getParameters(executable)[index]);
311+
try {
312+
return PARAMETER.isNamePresent(ParameterList.ForLoadedExecutable.EXECUTABLE.getParameters(executable)[index]);
313+
} catch (RuntimeException exception) {
314+
if (exception.getClass().getName().equals(MALFORMED_PARAMETERS_EXCEPTION)) {
315+
return false;
316+
}
317+
throw exception;
318+
}
297319
}
298320

299321
/**
300322
* {@inheritDoc}
301323
*/
302324
public int getModifiers() {
303-
return PARAMETER.getModifiers(ParameterList.ForLoadedExecutable.EXECUTABLE.getParameters(executable)[index]);
325+
try {
326+
return PARAMETER.getModifiers(ParameterList.ForLoadedExecutable.EXECUTABLE.getParameters(executable)[index]);
327+
} catch (RuntimeException exception) {
328+
if (exception.getClass().getName().equals(MALFORMED_PARAMETERS_EXCEPTION)) {
329+
return super.getModifiers();
330+
}
331+
throw exception;
332+
}
304333
}
305334

306335
/**

byte-buddy-dep/src/main/java/net/bytebuddy/pool/TypePool.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9845,7 +9845,7 @@ public void visitLocalVariable(String name, String descriptor, String signature,
98459845
}
98469846

98479847
@Override
9848-
public void visitParameter(String name, int modifiers) {
9848+
public void visitParameter(@MaybeNull String name, int modifiers) {
98499849
parameterTokens.add(new LazyTypeDescription.MethodToken.ParameterToken(name, modifiers));
98509850
}
98519851

0 commit comments

Comments
 (0)