From e21632555c1a9df86341d773af88bade4825d674 Mon Sep 17 00:00:00 2001 From: LianaHus Date: Tue, 15 Sep 2015 11:40:14 +0200 Subject: added compile time check for out of bounds access for ordinary arrays todo: check for dynamicaly sized arrays Conflicts: test/libsolidity/SolidityEndToEndTest.cpp --- test/libsolidity/SolidityEndToEndTest.cpp | 78 ++++++++++++++++++++----------- 1 file changed, 52 insertions(+), 26 deletions(-) (limited to 'test/libsolidity') diff --git a/test/libsolidity/SolidityEndToEndTest.cpp b/test/libsolidity/SolidityEndToEndTest.cpp index 43a5043d..73b24664 100644 --- a/test/libsolidity/SolidityEndToEndTest.cpp +++ b/test/libsolidity/SolidityEndToEndTest.cpp @@ -1037,12 +1037,9 @@ BOOST_AUTO_TEST_CASE(array_accessor) )"; compileAndRun(sourceCode); BOOST_CHECK(callContractFunction("data(uint256)", 0) == encodeArgs(8)); - BOOST_CHECK(callContractFunction("data(uint256)", 8) == encodeArgs()); BOOST_CHECK(callContractFunction("dynamicData(uint256)", 2) == encodeArgs(8)); - BOOST_CHECK(callContractFunction("dynamicData(uint256)", 8) == encodeArgs()); BOOST_CHECK(callContractFunction("smallTypeData(uint256)", 1) == encodeArgs(22)); BOOST_CHECK(callContractFunction("smallTypeData(uint256)", 127) == encodeArgs(2)); - BOOST_CHECK(callContractFunction("smallTypeData(uint256)", 128) == encodeArgs()); BOOST_CHECK(callContractFunction("multiple_map(uint256,uint256,uint256)", 2, 1, 2) == encodeArgs(3)); } @@ -1061,9 +1058,7 @@ BOOST_AUTO_TEST_CASE(accessors_mapping_for_array) )"; compileAndRun(sourceCode); BOOST_CHECK(callContractFunction("data(uint256,uint256)", 2, 2) == encodeArgs(8)); - BOOST_CHECK(callContractFunction("data(uint256, 256)", 2, 8) == encodeArgs()); BOOST_CHECK(callContractFunction("dynamicData(uint256,uint256)", 2, 2) == encodeArgs(8)); - BOOST_CHECK(callContractFunction("dynamicData(uint256,uint256)", 2, 8) == encodeArgs()); } BOOST_AUTO_TEST_CASE(multiple_elementary_accessors) @@ -1248,6 +1243,7 @@ BOOST_AUTO_TEST_CASE(convert_fixed_bytes_to_fixed_bytes_same_size) compileAndRun(sourceCode); BOOST_CHECK(callContractFunction("bytesToBytes(bytes4)", "abcd") == encodeArgs("abcd")); } + // fixed bytes to uint conversion tests BOOST_AUTO_TEST_CASE(convert_fixed_bytes_to_uint_same_size) { @@ -1300,6 +1296,7 @@ BOOST_AUTO_TEST_CASE(convert_fixed_bytes_to_uint_greater_size) BOOST_CHECK(callContractFunction("bytesToUint(bytes4)", string("abcd")) == encodeArgs(u256("0x61626364"))); } + // uint fixed bytes conversion tests BOOST_AUTO_TEST_CASE(convert_uint_to_fixed_bytes_same_size) { @@ -4180,21 +4177,21 @@ BOOST_AUTO_TEST_CASE(evm_exceptions_in_constructor_call_fail) BOOST_CHECK(callContractFunction("test()") == encodeArgs(2)); } -BOOST_AUTO_TEST_CASE(evm_exceptions_in_constructor_out_of_baund) -{ - char const* sourceCode = R"( - contract A { - uint public test = 1; - uint[3] arr; - function A() - { - test = arr[5]; - ++test; - } - } - )"; - BOOST_CHECK(compileAndRunWithoutCheck(sourceCode, 0, "A").empty()); -} +//BOOST_AUTO_TEST_CASE(evm_exceptions_in_constructor_out_of_baund) +//{ +// char const* sourceCode = R"( +// contract A { +// uint public test = 1; +// uint[3] arr; +// function A() +// { +// test = arr[5]; +// ++test; +// } +// } +// )"; +// BOOST_CHECK(compileAndRunWithoutCheck(sourceCode, 0, "A").empty()); +//} BOOST_AUTO_TEST_CASE(positive_integers_to_signed) { @@ -5266,19 +5263,48 @@ BOOST_AUTO_TEST_CASE(array_out_of_bound_access) { char const* sourceCode = R"( contract c { - uint[4] data; - function set(uint index) returns (bool) { - data[index] = 2; + uint[2] dataArray; + function set5th() returns (bool) { + dataArray[5] = 2; return true; } } )"; -// compileAndRun(sourceCode, 0, "Test"); -// BOOST_CHECK(callContractFunction("set()", u256(7)) == encodeArgs(false)); -// BOOST_CHECK(callContractFunction("set()", u256(3)) == encodeArgs(true)); compileRequireThrow(sourceCode); } +//BOOST_AUTO_TEST_CASE(dynamic_array_out_of_bound_access) +//{ +// char const* sourceCode = R"( +// contract c { +// uint[] dataArrayDynamic; +// function set5th() returns (bool) { +// dataArrayDynamic.length = 2; +// dataArrayDynamic[5] = 3; +// return true; +// } +// } +// )"; +// compileRequireThrow(sourceCode); +//} + +//BOOST_AUTO_TEST_CASE(bytes_out_of_bound_access) +//{ +// char const* sourceCode = R"( +// contract c { +// bytes data; +// function write() returns (uint) { +// data.length = 3; +// data[1] = 0x77; +// data[2] = 0x14; + +// data[8] = 3; +// } +// } +// )"; +// compileRequireThrow(sourceCode); +//} + BOOST_AUTO_TEST_SUITE_END() } -- cgit