diff options
Diffstat (limited to 'accounts/abi/abi.go')
-rw-r--r-- | accounts/abi/abi.go | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/accounts/abi/abi.go b/accounts/abi/abi.go index 205dc300b..02b4fa472 100644 --- a/accounts/abi/abi.go +++ b/accounts/abi/abi.go @@ -74,13 +74,17 @@ func (abi ABI) Pack(name string, args ...interface{}) ([]byte, error) { // Unpack output in v according to the abi specification func (abi ABI) Unpack(v interface{}, name string, output []byte) (err error) { - if err = bytesAreProper(output); err != nil { - return err + if len(output) == 0 { + return fmt.Errorf("abi: unmarshalling empty output") } + // since there can't be naming collisions with contracts and events, // we need to decide whether we're calling a method or an event var unpack unpacker if method, ok := abi.Methods[name]; ok { + if len(output)%32 != 0 { + return fmt.Errorf("abi: improperly formatted output") + } unpack = method } else if event, ok := abi.Events[name]; ok { unpack = event |