Merge pull request #2498 from ethereum/enum_conversion

[WIP] Disallow storing invalid booleans
This commit is contained in:
chriseth 2017-07-01 12:38:27 +02:00 committed by GitHub
commit 06f8949f10

View File

@ -3702,6 +3702,50 @@ BOOST_AUTO_TEST_CASE(enum_explicit_overflow)
BOOST_CHECK(callContractFunction("getChoiceExp(uint256)", 0) == encodeArgs(0)); BOOST_CHECK(callContractFunction("getChoiceExp(uint256)", 0) == encodeArgs(0));
} }
BOOST_AUTO_TEST_CASE(storing_invalid_boolean)
{
char const* sourceCode = R"(
contract C {
event Ev(bool);
bool public perm;
function set() returns(uint) {
bool tmp;
assembly {
tmp := 5
}
perm = tmp;
return 1;
}
function ret() returns(bool) {
bool tmp;
assembly {
tmp := 5
}
return tmp;
}
function ev() returns(uint) {
bool tmp;
assembly {
tmp := 5
}
Ev(tmp);
return 1;
}
}
)";
compileAndRun(sourceCode);
BOOST_CHECK(callContractFunction("set()") == encodeArgs(1));
BOOST_CHECK(callContractFunction("perm()") == encodeArgs(1));
BOOST_CHECK(callContractFunction("ret()") == encodeArgs(1));
BOOST_CHECK(callContractFunction("ev()") == encodeArgs(1));
BOOST_REQUIRE_EQUAL(m_logs.size(), 1);
BOOST_CHECK_EQUAL(m_logs[0].address, m_contractAddress);
BOOST_CHECK(m_logs[0].data == encodeArgs(1));
BOOST_REQUIRE_EQUAL(m_logs[0].topics.size(), 1);
BOOST_CHECK_EQUAL(m_logs[0].topics[0], dev::keccak256(string("Ev(bool)")));
}
BOOST_AUTO_TEST_CASE(using_contract_enums_with_explicit_contract_name) BOOST_AUTO_TEST_CASE(using_contract_enums_with_explicit_contract_name)
{ {
char const* sourceCode = R"( char const* sourceCode = R"(