From 07174a558943579b94604129b59f32832489fc66 Mon Sep 17 00:00:00 2001 From: Su5eD Date: Sun, 7 Apr 2024 12:44:08 +0200 Subject: [PATCH] Fix IOB in ExtractMixin --- .../sinytra/adapter/patch/transformer/ExtractMixin.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/definition/src/main/java/org/sinytra/adapter/patch/transformer/ExtractMixin.java b/definition/src/main/java/org/sinytra/adapter/patch/transformer/ExtractMixin.java index fb4d588..f33cbf5 100644 --- a/definition/src/main/java/org/sinytra/adapter/patch/transformer/ExtractMixin.java +++ b/definition/src/main/java/org/sinytra/adapter/patch/transformer/ExtractMixin.java @@ -263,6 +263,7 @@ private static Patch.Result recreateLocalVariables(ClassNode classNode, MethodNo TransformParameters patch = TransformParameters.builder() .chain(b -> IntStream.range(paramLocalStart, capturedLocals.paramLocalEnd()) .filter(i -> !used.contains(i)) + .boxed().sorted(Collections.reverseOrder()) .forEach(b::remove)) .build(); Patch.Result result = patch.apply(classNode, methodNode, methodContext, context); @@ -277,9 +278,11 @@ private static Patch.Result recreateLocalVariables(ClassNode classNode, MethodNo copy.invisibleAnnotations = null; methodNode.instructions = new InsnList(); // Remove used locals from the original method, as we'll be providing them ourselves - TransformParameters.Builder cleanupBuilder = TransformParameters.builder(); - IntStream.range(paramLocalStart, paramLocalStart + used.size()).forEach(cleanupBuilder::remove); - TransformParameters cleanupPatch = cleanupBuilder.build(); + TransformParameters cleanupPatch = TransformParameters.builder() + .chain(b -> IntStream.range(paramLocalStart, paramLocalStart + used.size()).boxed() + .sorted(Collections.reverseOrder()) + .forEach(b::remove)) + .build(); Patch.Result cleanupResult = cleanupPatch.apply(classNode, methodNode, methodContext, context); if (cleanupResult == Patch.Result.PASS) { return Patch.Result.PASS;