From d797dd1e260a3ee1dd29fbdbe23bcdf6228042c3 Mon Sep 17 00:00:00 2001 From: Alex Melkonyan Date: Thu, 22 Aug 2019 12:31:28 +0100 Subject: [PATCH 1/3] Fix bug #709 --- .../org/jf/dexlib2/util/Preconditions.java | 2 +- .../java/org/jf/util/PreconditionsTest.java | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 dexlib2/src/test/java/org/jf/util/PreconditionsTest.java diff --git a/dexlib2/src/main/java/org/jf/dexlib2/util/Preconditions.java b/dexlib2/src/main/java/org/jf/dexlib2/util/Preconditions.java index faf9fd2b4..d090993bf 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/util/Preconditions.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/util/Preconditions.java @@ -221,7 +221,7 @@ public static int checkArrayPayloadElementWidth(int elementWidth) { public static > L checkArrayPayloadElements(int elementWidth, L elements) { // mask of all bits that do not fit into an 'elementWidth'-bit number - long bitmask = -1L << elementWidth; + long bitmask = -1L << (elementWidth * 8); for (Number element : elements) { if ((element.longValue() & bitmask) != 0) { diff --git a/dexlib2/src/test/java/org/jf/util/PreconditionsTest.java b/dexlib2/src/test/java/org/jf/util/PreconditionsTest.java new file mode 100644 index 000000000..c43532a70 --- /dev/null +++ b/dexlib2/src/test/java/org/jf/util/PreconditionsTest.java @@ -0,0 +1,23 @@ +package org.jf.util; + +import java.util.ArrayList; +import java.util.List; +import org.jf.dexlib2.Opcode; +import org.jf.dexlib2.iface.instruction.formats.ArrayPayload; +import org.jf.dexlib2.util.Preconditions; +import org.junit.Assert; +import org.junit.Test; + +public class PreconditionsTest { + + @Test + public void test() { + int intSize = 4; + int bigNumber = 16843071; + List numbers = new ArrayList<>(); + numbers.add(bigNumber); + + Preconditions.checkArrayPayloadElements(intSize, numbers); + } + +} From e07a3bfbd71b29edfb581c9e8ffc101d1ab84f22 Mon Sep 17 00:00:00 2001 From: Alex Melkonyan Date: Thu, 22 Aug 2019 12:31:28 +0100 Subject: [PATCH 2/3] Fix bug #709 --- dexlib2/src/test/java/org/jf/util/PreconditionsTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dexlib2/src/test/java/org/jf/util/PreconditionsTest.java b/dexlib2/src/test/java/org/jf/util/PreconditionsTest.java index c43532a70..1712b92f7 100644 --- a/dexlib2/src/test/java/org/jf/util/PreconditionsTest.java +++ b/dexlib2/src/test/java/org/jf/util/PreconditionsTest.java @@ -11,13 +11,13 @@ public class PreconditionsTest { @Test - public void test() { + public void checkArrayPayloadElements() { int intSize = 4; int bigNumber = 16843071; List numbers = new ArrayList<>(); numbers.add(bigNumber); + // Shouldn't throw any arrays, payload is correct. Preconditions.checkArrayPayloadElements(intSize, numbers); } - } From 9d768518c744a5ee3250197bc1764a19abdbe053 Mon Sep 17 00:00:00 2001 From: Alex Melkonyan Date: Thu, 22 Aug 2019 12:31:28 +0100 Subject: [PATCH 3/3] Fix bug #709 --- dexlib2/src/main/java/org/jf/dexlib2/util/Preconditions.java | 4 ++-- dexlib2/src/test/java/org/jf/util/PreconditionsTest.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/dexlib2/src/main/java/org/jf/dexlib2/util/Preconditions.java b/dexlib2/src/main/java/org/jf/dexlib2/util/Preconditions.java index d090993bf..e5745846b 100644 --- a/dexlib2/src/main/java/org/jf/dexlib2/util/Preconditions.java +++ b/dexlib2/src/main/java/org/jf/dexlib2/util/Preconditions.java @@ -220,13 +220,13 @@ public static int checkArrayPayloadElementWidth(int elementWidth) { } public static > L checkArrayPayloadElements(int elementWidth, L elements) { - // mask of all bits that do not fit into an 'elementWidth'-bit number + // mask of all bits that do not fit into an 'elementWidth'-byte number long bitmask = -1L << (elementWidth * 8); for (Number element : elements) { if ((element.longValue() & bitmask) != 0) { throw new IllegalArgumentException( - String.format("Number %d must fit into a %d-bit number", element.longValue(), elementWidth)); + String.format("Number %d must fit into a %d-byte number", element.longValue(), elementWidth)); } } diff --git a/dexlib2/src/test/java/org/jf/util/PreconditionsTest.java b/dexlib2/src/test/java/org/jf/util/PreconditionsTest.java index 1712b92f7..08d02e197 100644 --- a/dexlib2/src/test/java/org/jf/util/PreconditionsTest.java +++ b/dexlib2/src/test/java/org/jf/util/PreconditionsTest.java @@ -17,7 +17,7 @@ public void checkArrayPayloadElements() { List numbers = new ArrayList<>(); numbers.add(bigNumber); - // Shouldn't throw any arrays, payload is correct. + // Shouldn't throw any exceptions, payload is correct. Preconditions.checkArrayPayloadElements(intSize, numbers); } }