From 5127cbb22c8be536996137416f826afd231b0c14 Mon Sep 17 00:00:00 2001 From: Remco Bloemen Date: Sat, 23 Jun 2018 18:03:49 +0200 Subject: Return inplace bytes in LibBytes.readBytesWithLength --- .../src/contracts/current/utils/LibBytes/LibBytes.sol | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) (limited to 'packages/contracts') diff --git a/packages/contracts/src/contracts/current/utils/LibBytes/LibBytes.sol b/packages/contracts/src/contracts/current/utils/LibBytes/LibBytes.sol index e4cbf318b..289d086d6 100644 --- a/packages/contracts/src/contracts/current/utils/LibBytes/LibBytes.sol +++ b/packages/contracts/src/contracts/current/utils/LibBytes/LibBytes.sol @@ -459,6 +459,8 @@ library LibBytes { } /// @dev Reads nested bytes from a specific position. + /// @dev NOTE: the returned value overlaps with the input value. + /// Both should be treated as immutable. /// @param b Byte array containing nested bytes. /// @param index Index of nested bytes. /// @return result Nested bytes. @@ -480,15 +482,11 @@ library LibBytes { b.length >= index + nestedBytesLength, GREATER_OR_EQUAL_TO_NESTED_BYTES_LENGTH_REQUIRED ); - - // Allocate memory and copy value to result - result = new bytes(nestedBytesLength); - memCopy( - result.contentAddress(), - b.contentAddress() + index, - nestedBytesLength - ); - + + // Return a pointer to the byte array as it exists inside `b` + assembly { + result := add(b, index) + } return result; } -- cgit