aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorweimumu <934657014@qq.com>2018-12-17 16:50:52 +0800
committerGuillaume Ballet <gballet@gmail.com>2018-12-17 16:50:52 +0800
commit3ad73443c7a96c928577234df5c742d53f3293ef (patch)
tree6fefd22f93c2cf96bdae53031ee9f4b714a62f8c
parent7dbb075c07511ccdfd8b428cce1adbc6c146eb18 (diff)
downloaddexon-3ad73443c7a96c928577234df5c742d53f3293ef.tar.gz
dexon-3ad73443c7a96c928577234df5c742d53f3293ef.tar.zst
dexon-3ad73443c7a96c928577234df5c742d53f3293ef.zip
fix slice unpack bug in accounts/abi (#18321)
* fix slice unpack bug in accounts/abi
-rw-r--r--accounts/abi/unpack.go2
-rw-r--r--accounts/abi/unpack_test.go5
2 files changed, 6 insertions, 1 deletions
diff --git a/accounts/abi/unpack.go b/accounts/abi/unpack.go
index d5875140c..c3bbbb251 100644
--- a/accounts/abi/unpack.go
+++ b/accounts/abi/unpack.go
@@ -151,7 +151,7 @@ func forEachUnpack(t Type, output []byte, start, size int) (interface{}, error)
// Arrays have packed elements, resulting in longer unpack steps.
// Slices have just 32 bytes per element (pointing to the contents).
elemSize := 32
- if t.T == ArrayTy {
+ if t.T == ArrayTy || t.T == SliceTy {
elemSize = getFullElemSize(t.Elem)
}
diff --git a/accounts/abi/unpack_test.go b/accounts/abi/unpack_test.go
index 97552b90c..29ed4522c 100644
--- a/accounts/abi/unpack_test.go
+++ b/accounts/abi/unpack_test.go
@@ -192,6 +192,11 @@ var unpackTests = []unpackTest{
want: [][2]uint8{{1, 2}},
},
{
+ def: `[{"type": "uint8[2][]"}]`,
+ enc: "000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002",
+ want: [][2]uint8{{1, 2}, {1, 2}},
+ },
+ {
def: `[{"type": "uint16[]"}]`,
enc: "0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000002",
want: []uint16{1, 2},