From 5d192cb8448239e095c9b627b43d4b6f5818a8d2 Mon Sep 17 00:00:00 2001 From: Hang Su Date: Mon, 28 Nov 2022 10:11:01 -0500 Subject: [PATCH 1/6] fix --- .../java/com/algorand/algosdk/abi/ABIType.java | 7 ++++++- .../java/com/algorand/algosdk/abi/TestTypes.java | 16 ++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/algorand/algosdk/abi/ABIType.java b/src/main/java/com/algorand/algosdk/abi/ABIType.java index 8f1c24161..2ec510233 100644 --- a/src/main/java/com/algorand/algosdk/abi/ABIType.java +++ b/src/main/java/com/algorand/algosdk/abi/ABIType.java @@ -118,8 +118,13 @@ else if (str.charAt(i) == ')') { if (parenStack.isEmpty()) throw new IllegalArgumentException("parsing error: tuple parentheses are not balanced: " + str); int leftParenIndex = parenStack.pop(); - if (parenStack.isEmpty()) + if (parenStack.isEmpty()) { + int forwardIndex = i + 1; + while (forwardIndex < str.length() && str.charAt(forwardIndex) != ',') + forwardIndex++; + i = forwardIndex - 1; parenSegments.add(new Segment(leftParenIndex, i)); + } } } if (!parenStack.isEmpty()) diff --git a/src/test/java/com/algorand/algosdk/abi/TestTypes.java b/src/test/java/com/algorand/algosdk/abi/TestTypes.java index bd31681bf..967de92ea 100644 --- a/src/test/java/com/algorand/algosdk/abi/TestTypes.java +++ b/src/test/java/com/algorand/algosdk/abi/TestTypes.java @@ -238,6 +238,22 @@ public void TestTypeFromStringValid() { ) ) ); + assertThat(ABIType.valueOf("(uint32,(uint64,bool)[10],byte)")).isEqualTo( + new TypeTuple( + Arrays.asList( + new TypeUint(32), + new TypeArrayStatic( + new TypeTuple( + Arrays.asList( + new TypeUint(64), + new TypeBool() + ) + ), + 10), + new TypeByte() + ) + ) + ); } @Test From 2d6ebea09ef2d1b107601f0c0c6333f2143a6f2c Mon Sep 17 00:00:00 2001 From: Hang Su Date: Mon, 28 Nov 2022 13:03:42 -0500 Subject: [PATCH 2/6] regexp change --- src/main/java/com/algorand/algosdk/abi/ABIType.java | 2 +- src/main/java/com/algorand/algosdk/abi/TypeArrayStatic.java | 4 ++-- src/test/java/com/algorand/algosdk/abi/TestTypes.java | 1 - 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/main/java/com/algorand/algosdk/abi/ABIType.java b/src/main/java/com/algorand/algosdk/abi/ABIType.java index 8f1c24161..d4813a8ef 100644 --- a/src/main/java/com/algorand/algosdk/abi/ABIType.java +++ b/src/main/java/com/algorand/algosdk/abi/ABIType.java @@ -9,7 +9,7 @@ public abstract class ABIType { public static final int ABI_DYNAMIC_HEAD_BYTE_LEN = 2; - private static final Pattern staticArrayPattern = Pattern.compile("^(?[a-z\\d\\[\\](),]+)\\[(?[1-9][\\d]*)]$"); + private static final Pattern staticArrayPattern = Pattern.compile("^(?[a-z\\d\\[\\](),]+)\\[(?0|[1-9][\\d]*)]$"); private static final Pattern ufixedPattern = Pattern.compile("^ufixed(?[1-9][\\d]*)x(?[1-9][\\d]*)$"); /** diff --git a/src/main/java/com/algorand/algosdk/abi/TypeArrayStatic.java b/src/main/java/com/algorand/algosdk/abi/TypeArrayStatic.java index 3b539dcd2..9dc5fb101 100644 --- a/src/main/java/com/algorand/algosdk/abi/TypeArrayStatic.java +++ b/src/main/java/com/algorand/algosdk/abi/TypeArrayStatic.java @@ -7,8 +7,8 @@ public class TypeArrayStatic extends ABIType { public final int length; public TypeArrayStatic(ABIType elemType, int length) { - if (length < 1) - throw new IllegalArgumentException("static-array initialize failure: array length should be at least 1"); + if (length < 0) + throw new IllegalArgumentException("static-array initialize failure: array length should be positive"); this.elemType = elemType; this.length = length; } diff --git a/src/test/java/com/algorand/algosdk/abi/TestTypes.java b/src/test/java/com/algorand/algosdk/abi/TestTypes.java index bd31681bf..a4848c730 100644 --- a/src/test/java/com/algorand/algosdk/abi/TestTypes.java +++ b/src/test/java/com/algorand/algosdk/abi/TestTypes.java @@ -266,7 +266,6 @@ public void TestTypeFromStringInvalid() { "[][][]", "stuff[]", // static array - "ufixed32x10[0]", "byte[10 ]", "uint64[0x21]", // tuple From 553e3bfab6ef5f3fa2c47725b76c86a18bdc92a2 Mon Sep 17 00:00:00 2001 From: Hang Su Date: Mon, 28 Nov 2022 14:44:18 -0500 Subject: [PATCH 3/6] cucumber test --- .test-env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.test-env b/.test-env index df783a4fd..3f160fc7d 100644 --- a/.test-env +++ b/.test-env @@ -1,6 +1,6 @@ # Configs for testing repo download: SDK_TESTING_URL="https://github.com/algorand/algorand-sdk-testing" -SDK_TESTING_BRANCH="master" +SDK_TESTING_BRANCH="zero-length" SDK_TESTING_HARNESS="test-harness" INSTALL_ONLY=0 From 7e4edc132ee0ef1ef23613d849a41ddd1924973e Mon Sep 17 00:00:00 2001 From: Hang Su Date: Tue, 29 Nov 2022 11:40:07 -0500 Subject: [PATCH 4/6] error message change to non-negative --- src/main/java/com/algorand/algosdk/abi/TypeArrayStatic.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/algorand/algosdk/abi/TypeArrayStatic.java b/src/main/java/com/algorand/algosdk/abi/TypeArrayStatic.java index 9dc5fb101..a56651479 100644 --- a/src/main/java/com/algorand/algosdk/abi/TypeArrayStatic.java +++ b/src/main/java/com/algorand/algosdk/abi/TypeArrayStatic.java @@ -8,7 +8,7 @@ public class TypeArrayStatic extends ABIType { public TypeArrayStatic(ABIType elemType, int length) { if (length < 0) - throw new IllegalArgumentException("static-array initialize failure: array length should be positive"); + throw new IllegalArgumentException("static-array initialize failure: array length should be non-negative"); this.elemType = elemType; this.length = length; } From 83b57fbcc14ca6e640ece8f78ee5545c6952f1a3 Mon Sep 17 00:00:00 2001 From: Hang Su Date: Tue, 29 Nov 2022 12:48:08 -0500 Subject: [PATCH 5/6] new negative testcase for static array length --- src/test/java/com/algorand/algosdk/abi/TestTypes.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/test/java/com/algorand/algosdk/abi/TestTypes.java b/src/test/java/com/algorand/algosdk/abi/TestTypes.java index 3d5516037..25fc45570 100644 --- a/src/test/java/com/algorand/algosdk/abi/TestTypes.java +++ b/src/test/java/com/algorand/algosdk/abi/TestTypes.java @@ -314,6 +314,7 @@ public void TestTypeFromStringInvalid() { "[][][]", "stuff[]", // static array + "bool[01]", "byte[10 ]", "uint64[0x21]", // tuple From 1bf522823a99435a9c7b639fb33db666509601bc Mon Sep 17 00:00:00 2001 From: Hang Su <87964331+ahangsu@users.noreply.github.com> Date: Tue, 29 Nov 2022 13:38:01 -0500 Subject: [PATCH 6/6] Update .test-env --- .test-env | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.test-env b/.test-env index 3f160fc7d..df783a4fd 100644 --- a/.test-env +++ b/.test-env @@ -1,6 +1,6 @@ # Configs for testing repo download: SDK_TESTING_URL="https://github.com/algorand/algorand-sdk-testing" -SDK_TESTING_BRANCH="zero-length" +SDK_TESTING_BRANCH="master" SDK_TESTING_HARNESS="test-harness" INSTALL_ONLY=0