Skip to content

Commit

Permalink
Fix NPE in DynFixMethodComparison
Browse files Browse the repository at this point in the history
  • Loading branch information
Su5eD committed Jul 17, 2024
1 parent 0302e00 commit ba6dadd
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,13 @@ public record Data(MethodContext.TargetPair dirtyTarget, AbstractInsnNode cleanI
@Override
public Data prepare(MethodContext methodContext) {
if (methodContext.methodAnnotation().matchesAny(ACCEPTED_ANNOTATIONS)) {
MethodContext.TargetPair dirtyInjectionTarget = methodContext.findDirtyInjectionTarget();
if (dirtyInjectionTarget == null) {
return null;
}
MethodContext.TargetPair cleanInjectionTarget = methodContext.findCleanInjectionTarget();
List<AbstractInsnNode> cleanInsns = methodContext.findInjectionTargetInsns(cleanInjectionTarget);
if (cleanInsns.size() == 1 && methodContext.failsDirtyInjectionCheck()) {
MethodContext.TargetPair dirtyInjectionTarget = methodContext.findDirtyInjectionTarget();
if (cleanInsns.size() == 1 && dirtyInjectionTarget != null && methodContext.failsDirtyInjectionCheck()) {
AbstractInsnNode cleanInjectionInsn = cleanInsns.getFirst();
return new Data(dirtyInjectionTarget, cleanInjectionInsn);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,16 @@
import java.util.stream.Stream;

public class DynFixMethodComparison implements DynamicFixer<DynFixMethodComparison.Data> {
public record Data(AbstractInsnNode cleanInjectionInsn) {
}
public record Data(AbstractInsnNode cleanInjectionInsn) {}

@Nullable
@Override
public Data prepare(MethodContext methodContext) {
if (methodContext.methodAnnotation().matchesDesc(MixinConstants.INJECT)) {
if (methodContext.methodAnnotation().matchesDesc(MixinConstants.INJECT) && methodContext.findDirtyInjectionTarget() != null) {
MethodContext.TargetPair cleanInjectionTarget = methodContext.findCleanInjectionTarget();
if (cleanInjectionTarget == null) {
return null;
}
List<AbstractInsnNode> cleanInsns = methodContext.findInjectionTargetInsns(cleanInjectionTarget);
if (cleanInsns.size() == 1) {
return new Data(cleanInsns.getFirst());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ public class DynamicInjectionPointPatch implements MethodTransform {

@Override
public Patch.Result apply(ClassNode classNode, MethodNode methodNode, MethodContext methodContext, PatchContext context) {
if (methodContext.failsDirtyInjectionCheck()) {
if (methodContext.failsDirtyInjectionCheck() && methodContext.findCleanInjectionTarget() != null) {
// TODO Only show in tests
LOGGER.debug(MIXINPATCH, "Considering method {}.{}", classNode.name, methodNode.name);

Expand Down

0 comments on commit ba6dadd

Please sign in to comment.