mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #2673 from ethereum/builtin-gas
Disallow gas modifier on sha256/ripemd160/ecrecover
This commit is contained in:
commit
38e9505a83
@ -5,6 +5,7 @@ Features:
|
|||||||
Bugfixes:
|
Bugfixes:
|
||||||
* Code Generator: ``.delegatecall()`` should always return execution outcome.
|
* Code Generator: ``.delegatecall()`` should always return execution outcome.
|
||||||
* Code Generator: Provide "new account gas" for low-level ``callcode`` and ``delegatecall``.
|
* Code Generator: Provide "new account gas" for low-level ``callcode`` and ``delegatecall``.
|
||||||
|
* Type Checker: Disallow the ``.gas()`` modifier on ``ecrecover``, ``sha256`` and ``ripemd160``.
|
||||||
|
|
||||||
### 0.4.14 (2017-07-31)
|
### 0.4.14 (2017-07-31)
|
||||||
|
|
||||||
|
@ -2402,9 +2402,6 @@ MemberList::MemberMap FunctionType::nativeMembers(ContractDefinition const*) con
|
|||||||
{
|
{
|
||||||
case Kind::External:
|
case Kind::External:
|
||||||
case Kind::Creation:
|
case Kind::Creation:
|
||||||
case Kind::ECRecover:
|
|
||||||
case Kind::SHA256:
|
|
||||||
case Kind::RIPEMD160:
|
|
||||||
case Kind::BareCall:
|
case Kind::BareCall:
|
||||||
case Kind::BareCallCode:
|
case Kind::BareCallCode:
|
||||||
case Kind::BareDelegateCall:
|
case Kind::BareDelegateCall:
|
||||||
|
@ -2399,21 +2399,6 @@ BOOST_AUTO_TEST_CASE(gas_and_value_basic)
|
|||||||
BOOST_REQUIRE(callContractFunction("checkState()") == encodeArgs(false, 20 - 5));
|
BOOST_REQUIRE(callContractFunction("checkState()") == encodeArgs(false, 20 - 5));
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(gas_for_builtin)
|
|
||||||
{
|
|
||||||
char const* sourceCode = R"(
|
|
||||||
contract Contract {
|
|
||||||
function test(uint g) returns (bytes32 data, bool flag) {
|
|
||||||
data = ripemd160.gas(g)("abc");
|
|
||||||
flag = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)";
|
|
||||||
compileAndRun(sourceCode);
|
|
||||||
BOOST_CHECK(callContractFunction("test(uint256)", 500) == bytes());
|
|
||||||
BOOST_CHECK(callContractFunction("test(uint256)", 800) == encodeArgs(u256("0x8eb208f7e05d987a9b044a8e98c6b087f15a0bfc000000000000000000000000"), true));
|
|
||||||
}
|
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(value_complex)
|
BOOST_AUTO_TEST_CASE(value_complex)
|
||||||
{
|
{
|
||||||
char const* sourceCode = R"(
|
char const* sourceCode = R"(
|
||||||
|
@ -6461,6 +6461,30 @@ BOOST_AUTO_TEST_CASE(builtin_reject_gas)
|
|||||||
}
|
}
|
||||||
)";
|
)";
|
||||||
CHECK_ERROR(text, TypeError, "Member \"gas\" not found or not visible after argument-dependent lookup");
|
CHECK_ERROR(text, TypeError, "Member \"gas\" not found or not visible after argument-dependent lookup");
|
||||||
|
text = R"(
|
||||||
|
contract C {
|
||||||
|
function f() {
|
||||||
|
sha256.gas();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
CHECK_ERROR(text, TypeError, "Member \"gas\" not found or not visible after argument-dependent lookup");
|
||||||
|
text = R"(
|
||||||
|
contract C {
|
||||||
|
function f() {
|
||||||
|
ripemd160.gas();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
CHECK_ERROR(text, TypeError, "Member \"gas\" not found or not visible after argument-dependent lookup");
|
||||||
|
text = R"(
|
||||||
|
contract C {
|
||||||
|
function f() {
|
||||||
|
ecrecover.gas();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)";
|
||||||
|
CHECK_ERROR(text, TypeError, "Member \"gas\" not found or not visible after argument-dependent lookup");
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_CASE(builtin_reject_value)
|
BOOST_AUTO_TEST_CASE(builtin_reject_value)
|
||||||
|
Loading…
Reference in New Issue
Block a user