From 3d115a28fd5c8cec43d773c7cbad5f9398e0ebbb Mon Sep 17 00:00:00 2001 From: chriseth Date: Wed, 10 Jun 2020 11:24:35 +0200 Subject: [PATCH] Fix documentation example. --- docs/types/reference-types.rst | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/docs/types/reference-types.rst b/docs/types/reference-types.rst index 6283eaa0e..5bd242f06 100644 --- a/docs/types/reference-types.rst +++ b/docs/types/reference-types.rst @@ -430,7 +430,13 @@ Array slices are useful to ABI-decode secondary data passed in function paramete /// Forward call to "setOwner(address)" that is implemented by client /// after doing basic validation on the address argument. function forward(bytes calldata _payload) external { - bytes4 sig = abi.decode(_payload[:4], (bytes4)); + // Since ABI decoding requires padded data, we cannot + // use abi.decode(_payload[:4], (bytes4)). + bytes4 sig = + _payload[0] | + (bytes4(_payload[1]) >> 8) | + (bytes4(_payload[2]) >> 16) | + (bytes4(_payload[3]) >> 24); if (sig == bytes4(keccak256("setOwner(address)"))) { address owner = abi.decode(_payload[4:], (address)); require(owner != address(0), "Address of owner cannot be zero.");