mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-25 22:26:42 +00:00
accounts/abi: Index output for slices and arrays correctly
This commit is contained in:
parent
f3228592f5
commit
1c0116ae6c
1 changed files with 8 additions and 1 deletions
|
|
@ -274,12 +274,19 @@ func (abi ABI) Unpack(v interface{}, name string, output []byte) error {
|
||||||
// struct will match named return values to the struct's field
|
// struct will match named return values to the struct's field
|
||||||
// names
|
// names
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
|
idx := 0
|
||||||
for i := 0; i < len(method.Outputs); i++ {
|
for i := 0; i < len(method.Outputs); i++ {
|
||||||
marshalledValue, err := toGoType(i, method.Outputs[i], output)
|
marshalledValue, err := toGoType(idx, method.Outputs[i], output)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
reflectValue := reflect.ValueOf(marshalledValue)
|
reflectValue := reflect.ValueOf(marshalledValue)
|
||||||
|
switch reflectValue.Type().Kind() {
|
||||||
|
case reflect.Slice, reflect.Array:
|
||||||
|
idx += reflectValue.Len()
|
||||||
|
default:
|
||||||
|
idx++
|
||||||
|
}
|
||||||
|
|
||||||
for j := 0; j < typ.NumField(); j++ {
|
for j := 0; j < typ.NumField(); j++ {
|
||||||
field := typ.Field(j)
|
field := typ.Field(j)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue