diff --git a/codegen/src/main/java/org/web3j/codegen/SolidityFunctionWrapper.java b/codegen/src/main/java/org/web3j/codegen/SolidityFunctionWrapper.java index d8bb4bc95..16f0524b6 100644 --- a/codegen/src/main/java/org/web3j/codegen/SolidityFunctionWrapper.java +++ b/codegen/src/main/java/org/web3j/codegen/SolidityFunctionWrapper.java @@ -395,7 +395,7 @@ private FieldSpec createLibrariesLinkedBinaryField() { .build(); } - private FieldSpec createBinaryDefinition(String binary) { + FieldSpec createBinaryDefinition(String binary) { if (binary.length() < 65534) { return FieldSpec.builder(String.class, BINARY) .addModifiers(Modifier.PUBLIC, Modifier.FINAL, Modifier.STATIC) @@ -407,7 +407,8 @@ private FieldSpec createBinaryDefinition(String binary) { StringBuilder stringBuilderString = new StringBuilder().append("new StringBuilder()"); for (String s : argsArray) { stringBuilderString.append(".append(\""); - stringBuilderString.append(s); + stringBuilderString.append( + s.replaceAll("\\$", "\\$\\$")); // escape $ which bytecode may contain stringBuilderString.append("\")"); } stringBuilderString.append(".toString()"); diff --git a/codegen/src/test/java/org/web3j/codegen/SolidityFunctionWrapperTest.java b/codegen/src/test/java/org/web3j/codegen/SolidityFunctionWrapperTest.java index 8e6f044bd..da7ea382d 100644 --- a/codegen/src/test/java/org/web3j/codegen/SolidityFunctionWrapperTest.java +++ b/codegen/src/test/java/org/web3j/codegen/SolidityFunctionWrapperTest.java @@ -983,4 +983,13 @@ public void testBuildFunctionLinkBinaryWithReferences() throws Exception { assertEquals(methodSpec.toString(), (expected)); } + + @Test + public void testBinaryWithUnlinkedLibraryLengthOver65534() throws Exception { + solidityFunctionWrapper.createBinaryDefinition( + "0x" + + "a".repeat(40000) + + "__$927c5a12e2f339676f56d42ec1c0537964$__" + + "a".repeat(40000)); + } }