diff options
Diffstat (limited to 'agent/src/main/java/com/code_intelligence/jazzer/autofuzz/FuzzTarget.java')
-rw-r--r-- | agent/src/main/java/com/code_intelligence/jazzer/autofuzz/FuzzTarget.java | 62 |
1 files changed, 41 insertions, 21 deletions
diff --git a/agent/src/main/java/com/code_intelligence/jazzer/autofuzz/FuzzTarget.java b/agent/src/main/java/com/code_intelligence/jazzer/autofuzz/FuzzTarget.java index c9c0339f..87972a89 100644 --- a/agent/src/main/java/com/code_intelligence/jazzer/autofuzz/FuzzTarget.java +++ b/agent/src/main/java/com/code_intelligence/jazzer/autofuzz/FuzzTarget.java @@ -81,7 +81,8 @@ public class FuzzTarget { return; } - if (methodName.equals("new")) { + boolean isConstructor = methodName.equals("new"); + if (isConstructor) { targetExecutables = Arrays.stream(targetClass.getConstructors()) .filter(constructor @@ -98,27 +99,46 @@ public class FuzzTarget { .toArray(Executable[] ::new); } if (targetExecutables.length == 0) { - if (descriptor == null) { - System.err.printf("Failed to find accessible methods named %s in class %s for autofuzz.%n" - + "Accessible methods:%n%s", - methodName, className, - Arrays.stream(targetClass.getMethods()) - .map(method - -> String.format( - "%s::%s", method.getDeclaringClass().getName(), method.getName())) - .distinct() - .collect(Collectors.joining(System.lineSeparator()))); + if (isConstructor) { + if (descriptor == null) { + System.err.printf( + "Failed to find accessible constructors in class %s for autofuzz.%n", className); + } else { + System.err.printf( + "Failed to find accessible constructors with signature %s in class %s for autofuzz.%n" + + "Accessible constructors:%n%s", + descriptor, className, + Arrays.stream(targetClass.getConstructors()) + .map(method + -> String.format("%s::new%s", method.getDeclaringClass().getName(), + Utils.getReadableDescriptor(method))) + .distinct() + .collect(Collectors.joining(System.lineSeparator()))); + } } else { - System.err.printf("Failed to find accessible methods named %s in class %s for autofuzz.%n" - + "Accessible methods with that name:%n%s", - methodName, className, - Arrays.stream(targetClass.getMethods()) - .filter(method -> method.getName().equals(methodName)) - .map(method - -> String.format("%s::%s%s", method.getDeclaringClass().getName(), - method.getName(), Utils.getReadableDescriptor(method))) - .distinct() - .collect(Collectors.joining(System.lineSeparator()))); + if (descriptor == null) { + System.err.printf("Failed to find accessible methods named %s in class %s for autofuzz.%n" + + "Accessible methods:%n%s", + methodName, className, + Arrays.stream(targetClass.getMethods()) + .map(method + -> String.format( + "%s::%s", method.getDeclaringClass().getName(), method.getName())) + .distinct() + .collect(Collectors.joining(System.lineSeparator()))); + } else { + System.err.printf( + "Failed to find accessible methods named %s with signature %s in class %s for autofuzz.%n" + + "Accessible methods with that name:%n%s", + methodName, descriptor, className, + Arrays.stream(targetClass.getMethods()) + .filter(method -> method.getName().equals(methodName)) + .map(method + -> String.format("%s::%s%s", method.getDeclaringClass().getName(), + method.getName(), Utils.getReadableDescriptor(method))) + .distinct() + .collect(Collectors.joining(System.lineSeparator()))); + } } System.exit(1); } |