In @0x/contracts-exchange
: Fix dispatchTransferFrom
so it preserves the assetData.
This commit is contained in:
committed by
Amir Bandeali
parent
94a91ed5c8
commit
c36dff6354
@@ -162,11 +162,12 @@ contract MixinAssetProxyDispatcher is
|
|||||||
/////// Setup Data Area ///////
|
/////// Setup Data Area ///////
|
||||||
// This area holds `assetData`.
|
// This area holds `assetData`.
|
||||||
let dataArea := add(cdStart, 132)
|
let dataArea := add(cdStart, 132)
|
||||||
|
let assetDataArea := assetData
|
||||||
// solhint-disable-next-line no-empty-blocks
|
// solhint-disable-next-line no-empty-blocks
|
||||||
for {} lt(dataArea, cdEnd) {} {
|
for {} lt(dataArea, cdEnd) {} {
|
||||||
mstore(dataArea, mload(assetData))
|
mstore(dataArea, mload(assetDataArea))
|
||||||
dataArea := add(dataArea, 32)
|
dataArea := add(dataArea, 32)
|
||||||
assetData := add(assetData, 32)
|
assetDataArea := add(assetDataArea, 32)
|
||||||
}
|
}
|
||||||
|
|
||||||
/////// Call `assetProxy.transferFrom` using the constructed calldata ///////
|
/////// Call `assetProxy.transferFrom` using the constructed calldata ///////
|
||||||
@@ -181,7 +182,7 @@ contract MixinAssetProxyDispatcher is
|
|||||||
)
|
)
|
||||||
|
|
||||||
if iszero(didSucceed) { // Call reverted.
|
if iszero(didSucceed) { // Call reverted.
|
||||||
// Attempt to to decode standard error messages with the
|
// Attempt to to decode standard revert messages with the
|
||||||
// signature `Error(string)` so we can upgrade them to
|
// signature `Error(string)` so we can upgrade them to
|
||||||
// a rich revert.
|
// a rich revert.
|
||||||
|
|
||||||
@@ -197,11 +198,11 @@ contract MixinAssetProxyDispatcher is
|
|||||||
|
|
||||||
// Make sure the return value is long enough.
|
// Make sure the return value is long enough.
|
||||||
if gt(returndatasize(), 67) {
|
if gt(returndatasize(), 67) {
|
||||||
// Check that the selector matches for a standard error.
|
// Check that the selector matches for a standard revert error.
|
||||||
let selector := and(mload(sub(cdStart, 28)), 0xffffffff)
|
let selector := and(mload(sub(cdStart, 28)), 0xffffffff)
|
||||||
cdStart := add(cdStart, 4)
|
cdStart := add(cdStart, 4)
|
||||||
if eq(selector, 0x08c379a) {
|
if eq(selector, 0x08c379a0) {
|
||||||
// Set revertMessage to the start of Data.
|
// Set revertMessage to the start of the reason string.
|
||||||
revertMessage := add(cdStart, mload(cdStart))
|
revertMessage := add(cdStart, mload(cdStart))
|
||||||
// Truncate the data length if it's larger than our buffer
|
// Truncate the data length if it's larger than our buffer
|
||||||
// size (288 - 32 = 256)
|
// size (288 - 32 = 256)
|
||||||
|
Reference in New Issue
Block a user