diff --git a/ops/docker/ci-builder/Dockerfile b/ops/docker/ci-builder/Dockerfile index a390b8bbda09d..1646b227df185 100644 --- a/ops/docker/ci-builder/Dockerfile +++ b/ops/docker/ci-builder/Dockerfile @@ -16,7 +16,7 @@ WORKDIR /opt/foundry # Only diff from upstream docker image is this clone instead # of COPY. We select a specific commit to use. RUN git clone https://github.com/foundry-rs/foundry.git . \ - && git checkout 8f3fca9c608d58981daaffe11e7f8076644cb753 + && git checkout da2392e58bb8a7fefeba46b40c4df1afad8ccd22 RUN source $HOME/.profile && \ cargo build --release && \ diff --git a/packages/contracts-bedrock/contracts/test/Bytes.t.sol b/packages/contracts-bedrock/contracts/test/Bytes.t.sol index b567c7e74b766..21bb4902e3ef3 100644 --- a/packages/contracts-bedrock/contracts/test/Bytes.t.sol +++ b/packages/contracts-bedrock/contracts/test/Bytes.t.sol @@ -139,16 +139,20 @@ contract Bytes_slice_Test is Test { vm.assume(_length <= _input.length - _start); // Grab the free memory pointer before the slice operation - uint256 initPtr; + uint64 initPtr; assembly { initPtr := mload(0x40) } + uint64 expectedPtr = uint64(initPtr + 0x20 + ((_length + 0x1f) & ~uint256(0x1f))); + + // Ensure that all memory outside of the expected range is safe. + vm.expectSafeMemory(initPtr, expectedPtr); // Slice the input bytes array from `_start` to `_start + _length` bytes memory slice = Bytes.slice(_input, _start, _length); // Grab the free memory pointer after the slice operation - uint256 finalPtr; + uint64 finalPtr; assembly { finalPtr := mload(0x40) } @@ -165,10 +169,11 @@ contract Bytes_slice_Test is Test { // Note that we use a slightly less efficient, but equivalent method of rounding // up `_length` to the next multiple of 32 than is used in the `slice` function. // This is to diff test the method used in `slice`. - assertEq(finalPtr, initPtr + 0x20 + (((_length + 0x1F) >> 5) << 5)); + uint64 _expectedPtr = uint64(initPtr + 0x20 + (((_length + 0x1F) >> 5) << 5)); + assertEq(finalPtr, _expectedPtr); // Sanity check for equivalence of the rounding methods. - assertEq(((_length + 0x1F) >> 5) << 5, (_length + 0x1F) & ~uint256(0x1F)); + assertEq(_expectedPtr, expectedPtr); } // The slice length should be equal to `_length` diff --git a/packages/contracts-bedrock/package.json b/packages/contracts-bedrock/package.json index e9db0cad59ca1..400378e7d0fb1 100644 --- a/packages/contracts-bedrock/package.json +++ b/packages/contracts-bedrock/package.json @@ -77,7 +77,7 @@ "dotenv": "^16.0.0", "ds-test": "https://github.com/dapphub/ds-test.git#9310e879db8ba3ea6d5c6489a579118fd264a3f5", "ethereum-waffle": "^3.0.0", - "forge-std": "https://github.com/foundry-rs/forge-std.git#fd86115ed6aba8e234ee0fb86c12fe35eff0b2a0", + "forge-std": "https://github.com/foundry-rs/forge-std.git#46264e9788017fc74f9f58b7efa0bc6e1df6d410", "glob": "^7.1.6", "hardhat-deploy": "^0.11.4", "solhint": "^3.3.7", diff --git a/yarn.lock b/yarn.lock index 21435f664d9c0..f684f3b83a1b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11471,14 +11471,14 @@ forever-agent@~0.6.1: resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= +"forge-std@https://github.com/foundry-rs/forge-std.git#46264e9788017fc74f9f58b7efa0bc6e1df6d410": + version "1.5.2" + resolved "https://github.com/foundry-rs/forge-std.git#46264e9788017fc74f9f58b7efa0bc6e1df6d410" + "forge-std@https://github.com/foundry-rs/forge-std.git#53331f4cb2e313466f72440f3e73af048c454d02": version "1.2.0" resolved "https://github.com/foundry-rs/forge-std.git#53331f4cb2e313466f72440f3e73af048c454d02" -"forge-std@https://github.com/foundry-rs/forge-std.git#fd86115ed6aba8e234ee0fb86c12fe35eff0b2a0": - version "1.4.0" - resolved "https://github.com/foundry-rs/forge-std.git#fd86115ed6aba8e234ee0fb86c12fe35eff0b2a0" - form-data@^2.2.0: version "2.5.1" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4"