By manipulating the gas limit, relayers can affect the outcome of ZeroExTransactions  Won't Fix
ZeroExTransactions are meta transactions supported by the `Exchange`. They do not require that they are executed with a specific amount of gas, so the transaction relayer can choose how much gas to provide. By choosing a low gas limit, a relayer can affect the outcome of the transaction.\\nA `ZeroExTransaction` specifies a signer, an expiration, and call data for the transaction:\\n```\\nstruct ZeroExTransaction {\\n    uint256 salt;                   // Arbitrary number to ensure uniqueness of transaction hash.\\n    uint256 expirationTimeSeconds;  // Timestamp in seconds at which transaction expires.\\n    uint256 gasPrice;               // gasPrice that transaction is required to be executed with.\\n    address signerAddress;          // Address of transaction signer.\\n    bytes data;                     // AbiV2 encoded calldata.\\n}\\n```\\n\\nIn `MixinTransactions._executeTransaction()`, all available gas is forwarded in the delegate call, and the transaction is marked as executed:\\n```\\ntransactionsExecuted[transactionHash] = true;\\n(bool didSucceed, bytes memory returnData) = address(this).delegatecall(transaction.data);\\n```\\n\\nA likely attack vector for this is front running a `ZeroExTransaction` that ultimately invokes `_fillNoThrow()`. In this scenario, an attacker sees the call to `executeTransaction()` and makes their own call with a lower gas limit, causing the order being filled to run out of gas but allowing the transaction as a whole to succeed.\\nIf such an attack is successful, the `ZeroExTransaction` cannot be replayed, so the signer must produce a new signature and try again, ad infinitum.
Resolution\\nFrom the development team:\\nWhile this is an annoyance when used in combination with `marketBuyOrdersNoThrow` and `marketSellOrdersNoThrow`, it does not seem worth it to add a `gasLimit` to 0x transactions for this reason alone. Instead, this quirk should be documented along with a recommendation to use the `fillOrKill` variants of each market fill function when used in combination with 0x transactions.\\nAdd a `gasLimit` field to `ZeroExTransaction` and forward exactly that much gas via `delegatecall`. (Note that you must explicitly check that sufficient gas is available because the EVM allows you to supply a gas parameter that exceeds the actual remaining gas.)
```\\nstruct ZeroExTransaction {\\n    uint256 salt;                   // Arbitrary number to ensure uniqueness of transaction hash.\\n    uint256 expirationTimeSeconds;  // Timestamp in seconds at which transaction expires.\\n    uint256 gasPrice;               // gasPrice that transaction is required to be executed with.\\n    address signerAddress;          // Address of transaction signer.\\n    bytes data;                     // AbiV2 encoded calldata.\\n}\\n```\\n