Fix some issues per viewers' advices

pull/99/head
freewind 7 years ago
parent 1ac4087802
commit 01aef7783c
  1. 18
      README.md
  2. 10
      tests/__init__.py
  3. 35
      tests/cmd_line_test.py
  4. 15
      tests/disassembler_test.py
  5. 11
      tests/graph_test.py
  6. 3
      tests/ipc_test.py
  7. 1
      tests/mythril_dir/signatures.json
  8. 21
      tests/report_test.py
  9. 1
      tests/rpc_test.py
  10. 20
      tests/testdata/outputs/calls.sol.json
  11. 18
      tests/testdata/outputs/calls.sol.markdown
  12. 18
      tests/testdata/outputs/calls.sol.text
  13. 4
      tests/testdata/outputs/ether_send.sol.json
  14. 2
      tests/testdata/outputs/ether_send.sol.markdown
  15. 2
      tests/testdata/outputs/ether_send.sol.text
  16. 10
      tests/testdata/outputs/exceptions.sol.json
  17. 8
      tests/testdata/outputs/exceptions.sol.markdown
  18. 8
      tests/testdata/outputs/exceptions.sol.text
  19. 6
      tests/testdata/outputs/kinds_of_calls.sol.json
  20. 4
      tests/testdata/outputs/kinds_of_calls.sol.markdown
  21. 4
      tests/testdata/outputs/kinds_of_calls.sol.text
  22. 4
      tests/testdata/outputs/multi_contracts.sol.json
  23. 2
      tests/testdata/outputs/multi_contracts.sol.markdown
  24. 2
      tests/testdata/outputs/multi_contracts.sol.text
  25. 4
      tests/testdata/outputs/origin.sol.json
  26. 2
      tests/testdata/outputs/origin.sol.markdown
  27. 2
      tests/testdata/outputs/origin.sol.text
  28. 8
      tests/testdata/outputs/returnvalue.sol.json
  29. 6
      tests/testdata/outputs/returnvalue.sol.markdown
  30. 6
      tests/testdata/outputs/returnvalue.sol.text
  31. 18
      tests/testdata/outputs/rubixi.sol.json
  32. 16
      tests/testdata/outputs/rubixi.sol.markdown
  33. 16
      tests/testdata/outputs/rubixi.sol.text
  34. 4
      tests/testdata/outputs/suicide.sol.json
  35. 2
      tests/testdata/outputs/suicide.sol.markdown
  36. 2
      tests/testdata/outputs/suicide.sol.text
  37. 6
      tests/testdata/outputs/underflow.sol.json
  38. 4
      tests/testdata/outputs/underflow.sol.markdown
  39. 4
      tests/testdata/outputs/underflow.sol.text
  40. 10
      tests/testdata/outputs/weak_random.sol.json
  41. 8
      tests/testdata/outputs/weak_random.sol.markdown
  42. 8
      tests/testdata/outputs/weak_random.sol.text
  43. BIN
      tests/teststorage/contractstorage.fs.index

@ -43,6 +43,20 @@ If you plan to analyze Solidity code you'll also need the [native version of sol
## Running tests ## Running tests
### python version
First, make sure your python version is `3.6.x`. Some tests will fail with `3.5.x` since some generated easm code is different from `3.6.x`.
### truffle
In the tests, we tested the command `--truffle`, which required the `truffle` command is installed.
```
npm install -g truffle
```
### geth
In order to run tests and coverage reports, you need to run `geth` locally, since some tests depend on it. In order to run tests and coverage reports, you need to run `geth` locally, since some tests depend on it.
Install `geth` from here: <https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum> Install `geth` from here: <https://github.com/ethereum/go-ethereum/wiki/Building-Ethereum>
@ -59,7 +73,9 @@ geth --syncmode full --rpc --shh --debug
We use `--syncmode full` here because the `eth.blockNumber` will get increased soon in this mode, which is useful in tests. We use `--syncmode full` here because the `eth.blockNumber` will get increased soon in this mode, which is useful in tests.
If there is no error thrown, you can wait 1 or 2 minutes, then run the tests: If there is no error thrown, you can wait 1 or 2 minutes before running tests.
### Run the tests
```bash ```bash
pip3 install -r requirements.txt pip3 install -r requirements.txt

@ -0,0 +1,10 @@
from pathlib import Path
import os
TESTS_DIR = Path(__file__).parent
PROJECT_DIR = TESTS_DIR.parent
TESTDATA = TESTS_DIR / "testdata"
TESTDATA_INPUTS = TESTDATA / "inputs"
TESTDATA_OUTPUTS = TESTDATA / "outputs"
os.environ['MYTHRIL_DIR'] = str(TESTS_DIR / "mythril_dir")

@ -1,56 +1,53 @@
from unittest import TestCase from unittest import TestCase
from subprocess import check_output from subprocess import check_output
from pathlib import Path from tests import *
MYTH = str(PROJECT_DIR / "myth")
def output_of(command): def output_of(command):
return check_output(command, shell=True).decode("UTF-8") return check_output(command, shell=True).decode("UTF-8")
class BaseTestCase(TestCase): class CommandLineToolTestCase(TestCase):
def setUp(self):
self.tests_dir = Path(__file__).parent
self.myth = str(self.tests_dir.parent / "myth")
class CommandLineToolTestCase(BaseTestCase):
def test_disassemble_code_correctly(self): def test_disassemble_code_correctly(self):
command = "python3 {} self.myth -d -c 0x5050".format(self.myth) command = "python3 {} MYTH -d -c 0x5050".format(MYTH)
self.assertEqual('0 POP\n1 POP\n', output_of(command)) self.assertEqual('0 POP\n1 POP\n', output_of(command))
def test_disassemble_solidity_file_correctly(self): def test_disassemble_solidity_file_correctly(self):
solidity_file = str(self.tests_dir / 'testdata/inputs/metacoin.sol') solidity_file = str(TESTDATA_INPUTS / 'metacoin.sol')
command = "python3 {} -d {}".format(self.myth, solidity_file) command = "python3 {} -d {}".format(MYTH, solidity_file)
self.assertIn('0 PUSH1 0x60\n2 PUSH1 0x40', output_of(command)) self.assertIn('0 PUSH1 0x60\n2 PUSH1 0x40', output_of(command))
def test_hash_a_function_correctly(self): def test_hash_a_function_correctly(self):
command = "python3 {} --hash 'setOwner(address)'".format(self.myth) command = "python3 {} --hash 'setOwner(address)'".format(MYTH)
self.assertEqual('0x13af4035\n', output_of(command)) self.assertEqual('0x13af4035\n', output_of(command))
class TruffleTestCase(BaseTestCase): class TruffleTestCase(TestCase):
def test_analysis_truffle_project(self): def test_analysis_truffle_project(self):
truffle_project_root = str(self.tests_dir / "truffle_project") truffle_project_root = str(TESTS_DIR / "truffle_project")
command = "cd {}; truffle compile; python3 {} --truffle".format(truffle_project_root, self.myth) command = "cd {}; truffle compile; python3 {} --truffle".format(truffle_project_root, MYTH)
self.assertIn("In the function 'withdrawfunds()' a non-zero amount of Ether is sent to msg.sender.", output_of(command)) self.assertIn("In the function 'withdrawfunds()' a non-zero amount of Ether is sent to msg.sender.", output_of(command))
class InfuraTestCase(BaseTestCase): class InfuraTestCase(TestCase):
def test_infura_mainnet(self): def test_infura_mainnet(self):
command = "python3 {} --rpc infura-mainnet -d -a 0x2a0c0dbecc7e4d658f48e01e3fa353f44050c208".format(self.myth) command = "python3 {} --rpc infura-mainnet -d -a 0x2a0c0dbecc7e4d658f48e01e3fa353f44050c208".format(MYTH)
output = output_of(command) output = output_of(command)
self.assertIn("0 PUSH1 0x60\n2 PUSH1 0x40\n4 MSTORE", output) self.assertIn("0 PUSH1 0x60\n2 PUSH1 0x40\n4 MSTORE", output)
self.assertIn("7278 POP\n7279 POP\n7280 JUMP\n7281 STOP", output) self.assertIn("7278 POP\n7279 POP\n7280 JUMP\n7281 STOP", output)
def test_infura_rinkeby(self): def test_infura_rinkeby(self):
command = "python3 {} --rpc infura-rinkeby -d -a 0xB6f2bFED892a662bBF26258ceDD443f50Fa307F5".format(self.myth) command = "python3 {} --rpc infura-rinkeby -d -a 0xB6f2bFED892a662bBF26258ceDD443f50Fa307F5".format(MYTH)
output = output_of(command) output = output_of(command)
self.assertIn("34 JUMPDEST\n35 CALLVALUE", output) self.assertIn("34 JUMPDEST\n35 CALLVALUE", output)
def test_infura_kovan(self): def test_infura_kovan(self):
command = "python3 {} --rpc infura-kovan -d -a 0xE6bBF9B5A3451242F82f8cd458675092617a1235".format(self.myth) command = "python3 {} --rpc infura-kovan -d -a 0xE6bBF9B5A3451242F82f8cd458675092617a1235".format(MYTH)
output = output_of(command) output = output_of(command)
self.assertIn("9999 PUSH1 0x00\n10001 NOT\n10002 AND\n10003 PUSH1 0x00", output) self.assertIn("9999 PUSH1 0x00\n10001 NOT\n10002 AND\n10003 PUSH1 0x00", output)
def test_infura_ropsten(self): def test_infura_ropsten(self):
command = "python3 {} --rpc infura-ropsten -d -a 0x6e0E0e02377Bc1d90E8a7c21f12BA385C2C35f78".format(self.myth) command = "python3 {} --rpc infura-ropsten -d -a 0x6e0E0e02377Bc1d90E8a7c21f12BA385C2C35f78".format(MYTH)
output = output_of(command) output = output_of(command)
self.assertIn("1821 PUSH1 0x01\n1823 PUSH2 0x070c", output) self.assertIn("1821 PUSH1 0x01\n1823 PUSH2 0x070c", output)

File diff suppressed because one or more lines are too long

@ -1,5 +1,4 @@
from unittest import TestCase from unittest import TestCase
from pathlib import Path
from mythril.analysis.callgraph import generate_graph from mythril.analysis.callgraph import generate_graph
from mythril.analysis.report import Report from mythril.analysis.report import Report
@ -7,13 +6,12 @@ from mythril.analysis.security import fire_lasers
from mythril.analysis.symbolic import SymExecWrapper from mythril.analysis.symbolic import SymExecWrapper
from mythril.ether import util from mythril.ether import util
from mythril.ether.soliditycontract import SolidityContract from mythril.ether.soliditycontract import SolidityContract
from tests import *
TEST_FILES = Path(__file__).parent / "testdata"
class GraphTest(TestCase): class GraphTest(TestCase):
def test_generate_graph(self): def test_generate_graph(self):
for input_file in (TEST_FILES / "inputs").iterdir(): for input_file in TESTDATA_INPUTS.iterdir():
contract = SolidityContract(str(input_file), name=None, solc_args=None) contract = SolidityContract(str(input_file), name=None, solc_args=None)
sym = SymExecWrapper(contract, address=(util.get_indexed_address(0))) sym = SymExecWrapper(contract, address=(util.get_indexed_address(0)))
issues = fire_lasers(sym) issues = fire_lasers(sym)
@ -27,7 +25,8 @@ class GraphTest(TestCase):
html = generate_graph(sym) html = generate_graph(sym)
# (TEST_FILES / "outputs" / (input_file.name + ".graph.html")).write_text(html) # Useful for generating output file
# (TESTDATA_OUTPUTS / (input_file.name + ".graph.html")).write_text(html)
expected = (TEST_FILES / "outputs" / (input_file.name + ".graph.html")).read_text() expected = (TESTDATA_OUTPUTS / (input_file.name + ".graph.html")).read_text()
self.assertEqual(html, expected, "{}: graph html is changed".format(str(input_file))) self.assertEqual(html, expected, "{}: graph html is changed".format(str(input_file)))

@ -10,7 +10,7 @@ class IpcTest(TestCase):
return self.client.eth_newFilter(from_block="0x1", to_block="0x2", address="0x8888f1f195afa192cfee860698584c030f4c9db1") return self.client.eth_newFilter(from_block="0x1", to_block="0x2", address="0x8888f1f195afa192cfee860698584c030f4c9db1")
def setUp(self): def setUp(self):
self.client = EthIpc(socket_timeout=1.0) self.client = EthIpc()
def test_web3_clientVersion(self): def test_web3_clientVersion(self):
version = self.client.web3_clientVersion() version = self.client.web3_clientVersion()
@ -172,6 +172,7 @@ class IpcTest(TestCase):
count = self.client.eth_getUncleCountByBlockNumber(105) count = self.client.eth_getUncleCountByBlockNumber(105)
self.assertEqual(count, 1, "there should be 1 uncle at block 105") self.assertEqual(count, 1, "there should be 1 uncle at block 105")
@skip("""{'jsonrpc': '2.0', 'id': 1, 'error': {'code': -32000, 'message': "mining not ready: No work available yet, don't panic."}}""")
def test_eth_getWork(self): def test_eth_getWork(self):
work = self.client.eth_getWork() work = self.client.eth_getWork()
self.assertEqual(len(work), 3) self.assertEqual(len(work), 3)

@ -0,0 +1 @@
{"0x07f9f7ba": "StandardBounties(address)", "0x8c590917": "contribute(uint256,uint256)", "0x626a413a": "activateBounty(uint256,uint256)", "0x1e688c14": "fulfillBounty(uint256,string)", "0x41ac5dd0": "updateFulfillment(uint256,uint256,string)", "0xd9583497": "acceptFulfillment(uint256,uint256)", "0x16b57509": "killBounty(uint256)", "0x2d1fdef6": "extendDeadline(uint256,uint256)", "0x5d19606e": "transferIssuer(uint256,address)", "0xd6c0ceab": "changeBountyDeadline(uint256,uint256)", "0xf3d3402a": "changeBountyData(uint256,string)", "0x452ccadb": "changeBountyFulfillmentAmount(uint256,uint256)", "0xcdad6576": "changeBountyArbiter(uint256,address)", "0x992a3e75": "changeBountyPaysTokens(uint256,bool,address)", "0x422d4cd6": "increasePayout(uint256,uint256,uint256)", "0xb94b0a3a": "getFulfillment(uint256,uint256)", "0xee8c4bbf": "getBounty(uint256)", "0x86647bac": "getBountyArbiter(uint256)", "0xa60745aa": "getBountyData(uint256)", "0x19dba3d2": "getBountyToken(uint256)", "0x3278ba2f": "getNumBounties()", "0xfbe334f8": "getNumFulfillments(uint256)", "0xdb3b6263": "transitionToState(uint256,BountyStages)", "0x4e3b52fe": "metaCoin()", "0x412664ae": "sendToken(address,uint256)", "0x56885cd8": "crowdfunding()", "0x6c343ffe": "withdrawfunds()", "0xe8b5e51f": "invest()", "0xaa3288f4": "getBalance())", "0xc11a4b47": "Origin()", "0xf2fde38b": "transferOwnership(address)", "0x00362a95": "donate(address)", "0x70a08231": "balanceOf(address)", "0x2e1a7d4d": "withdraw(uint256)", "0x6241bfd1": "Token(uint256)", "0xa3210e87": "sendeth(address,uint256)", "0xcd38aa87": "chooseWinner()", "0xd6d22fa4": "MetaCoin()", "0x90b98a11": "sendCoin(address,uint256)", "0x7bd703e8": "getBalanceInEth(address)", "0xf8b2cb4f": "getBalance(address)", "0xa360b26f": "Migrations()", "0xfdacd576": "setCompleted(uint256)", "0x0900f010": "upgrade(address)", "0xcae9ca51": "approveAndCall(address,uint256,bytes)", "0xa9059cbb": "transfer(address,uint256)", "0x23b872dd": "transferFrom(address,address,uint256)", "0x095ea7b3": "approve(address,uint256)", "0xdd62ed3e": "allowance(address,address)", "0x525f8a5c": "setSaleStartTime(uint256)", "0xd132391a": "setSaleEndTime(uint256)", "0x0a0cd8c8": "setupDone()", "0xd7bb99ba": "contribute()", "0xf0349d5f": "setupStages()", "0x2a4f6533": "createTokenContract())", "0x42a6b21a": "getContributionLimit(address)", "0x1a787915": "startConditions(bytes32)", "0xf3fde261": "onTransition(bytes32)", "0x27816235": "onSaleEnded()", "0x091cde0b": "DisbursementHandler(address)", "0xf3fef3a3": "withdraw(address,uint256)", "0x4bc9fdc2": "calcMaxWithdraw()", "0xc9e61599": "createTarget())", "0x200094e0": "deployContract())", "0x5a048d78": "claim(Target)", "0x16ae6b67": "checkInvariant())", "0x2aa5ed61": "DayLimit(uint256)", "0xe7dde9a3": "_setDailyLimit(uint256)", "0x4a4c82c6": "_resetSpentToday()", "0x180aadb7": "underLimit(uint256)", "0x9d4468ff": "today())", "0x19045a25": "recover(bytes32,bytes)", "0xe92dfb23": "LimitBalance(uint256)", "0xd73dd623": "increaseApproval(address,uint256)", "0x66188463": "decreaseApproval(address,uint256)", "0xabaf5880": "Crowdsale(uint256,uint256,uint256,address)", "0xec8ac4d8": "buyTokens(address)", "0x9d735286": "forwardFunds()", "0x605120cf": "validPurchase())", "0x6e42787f": "hasEnded())", "0xe5c46944": "MultiSigWallet(address[],uint256)", "0x7065cb48": "addOwner(address)", "0x173825d9": "removeOwner(address)", "0xe20056e6": "replaceOwner(address,address)", "0xba51a6df": "changeRequirement(uint256)", "0xc6427474": "submitTransaction(address,uint256,bytes)", "0xc01a8c84": "confirmTransaction(uint256)", "0x20ea8d86": "revokeConfirmation(uint256)", "0xee22610b": "executeTransaction(uint256)", "0x784547a7": "isConfirmed(uint256)", "0xec096f8d": "addTransaction(address,uint256,bytes)", "0x8b51d13f": "getConfirmationCount(uint256)", "0x54741525": "getTransactionCount(bool,bool)", "0xa0e67e2b": "getOwners()", "0xb5dc40c3": "getConfirmations(uint256)", "0xa8abe69a": "getTransactionIds(uint256,uint256,bool,bool)"}

@ -1,5 +1,4 @@
from unittest import TestCase from unittest import TestCase
from pathlib import Path
from mythril.analysis.report import Report from mythril.analysis.report import Report
from mythril.analysis.security import fire_lasers from mythril.analysis.security import fire_lasers
@ -7,11 +6,10 @@ from mythril.analysis.symbolic import SymExecWrapper
from mythril.ether import util from mythril.ether import util
from mythril.ether.soliditycontract import SolidityContract from mythril.ether.soliditycontract import SolidityContract
import json import json
from tests import *
TEST_FILES = Path(__file__).parent / "testdata"
def _fix_path(text): def _fix_path(text):
return text.replace(str(TEST_FILES), "<TEST_FILES>") return text.replace(str(TESTDATA), "<TESTDATA>")
def _fix_debug_data(json_str): def _fix_debug_data(json_str):
read_json = json.loads(json_str) read_json = json.loads(json_str)
@ -22,7 +20,7 @@ def _fix_debug_data(json_str):
class AnalysisReportTest(TestCase): class AnalysisReportTest(TestCase):
def test_reports(self): def test_reports(self):
for input_file in (TEST_FILES / "inputs").iterdir(): for input_file in (TESTDATA / "inputs").iterdir():
contract = SolidityContract(str(input_file), name=None, solc_args=None) contract = SolidityContract(str(input_file), name=None, solc_args=None)
sym = SymExecWrapper(contract, address=(util.get_indexed_address(0))) sym = SymExecWrapper(contract, address=(util.get_indexed_address(0)))
issues = fire_lasers(sym) issues = fire_lasers(sym)
@ -34,13 +32,14 @@ class AnalysisReportTest(TestCase):
for issue in issues: for issue in issues:
report.append_issue(issue) report.append_issue(issue)
# (TEST_FILES / "outputs" / (input_file.name + ".text")).write_text(_fix_path(report.as_text())) # Useful for generating output file
# (TEST_FILES / "outputs" / (input_file.name + ".json")).write_text(_fix_path(_fix_debug_data(report.as_json()))) # (TESTDATA_OUTPUTS / (input_file.name + ".text")).write_text(_fix_path(report.as_text()))
# (TEST_FILES / "outputs" / (input_file.name + ".markdown")).write_text(_fix_path(report.as_markdown())) # (TESTDATA_OUTPUTS / (input_file.name + ".json")).write_text(_fix_path(_fix_debug_data(report.as_json())))
# (TESTDATA_OUTPUTS / (input_file.name + ".markdown")).write_text(_fix_path(report.as_markdown()))
text = (TEST_FILES / "outputs" / (input_file.name + ".text")).read_text() text = (TESTDATA / "outputs" / (input_file.name + ".text")).read_text()
json_report = (TEST_FILES / "outputs" / (input_file.name + ".json")).read_text() json_report = (TESTDATA / "outputs" / (input_file.name + ".json")).read_text()
markdown = (TEST_FILES / "outputs" / (input_file.name + ".markdown")).read_text() markdown = (TESTDATA / "outputs" / (input_file.name + ".markdown")).read_text()
self.assertEqual(_fix_path(report.as_text()), text, "{}: text report is changed".format(str(input_file))) self.assertEqual(_fix_path(report.as_text()), text, "{}: text report is changed".format(str(input_file)))
self.assertEqual(_fix_path(report.as_markdown()), markdown, "{}: markdown report is changed".format(str(input_file))) self.assertEqual(_fix_path(report.as_markdown()), markdown, "{}: markdown report is changed".format(str(input_file)))

@ -175,6 +175,7 @@ class RpcTest(TestCase):
count = self.client.eth_getUncleCountByBlockNumber(105) count = self.client.eth_getUncleCountByBlockNumber(105)
self.assertEqual(count, 1, "there should be 1 uncle at block 105") self.assertEqual(count, 1, "there should be 1 uncle at block 105")
@skip("""{'jsonrpc': '2.0', 'id': 1, 'error': {'code': -32000, 'message': "mining not ready: No work available yet, don't panic."}}""")
def test_eth_getWork(self): def test_eth_getWork(self):
work = self.client.eth_getWork() work = self.client.eth_getWork()
self.assertEqual(len(work), 3) self.assertEqual(len(work), 3)

@ -9,7 +9,7 @@
"type": "Informational", "type": "Informational",
"address": 661, "address": 661,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/calls.sol", "filename": "<TESTDATA>/inputs/calls.sol",
"lineno": 16, "lineno": 16,
"code": "fixed_address.call()" "code": "fixed_address.call()"
}, },
@ -20,7 +20,7 @@
"type": "Warning", "type": "Warning",
"address": 779, "address": 779,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/calls.sol", "filename": "<TESTDATA>/inputs/calls.sol",
"lineno": 29, "lineno": 29,
"code": "stored_address.call()" "code": "stored_address.call()"
}, },
@ -31,7 +31,7 @@
"type": "Informational", "type": "Informational",
"address": 858, "address": 858,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/calls.sol", "filename": "<TESTDATA>/inputs/calls.sol",
"lineno": 20, "lineno": 20,
"code": "fixed_address.call()" "code": "fixed_address.call()"
}, },
@ -42,7 +42,7 @@
"type": "Warning", "type": "Warning",
"address": 869, "address": 869,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/calls.sol", "filename": "<TESTDATA>/inputs/calls.sol",
"lineno": 21, "lineno": 21,
"code": "statevar = 0" "code": "statevar = 0"
}, },
@ -53,7 +53,7 @@
"type": "Warning", "type": "Warning",
"address": 912, "address": 912,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/calls.sol", "filename": "<TESTDATA>/inputs/calls.sol",
"lineno": 25, "lineno": 25,
"code": "addr.call()" "code": "addr.call()"
}, },
@ -64,7 +64,7 @@
"type": "Informational", "type": "Informational",
"address": 661, "address": 661,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/calls.sol", "filename": "<TESTDATA>/inputs/calls.sol",
"lineno": 16, "lineno": 16,
"code": "fixed_address.call()" "code": "fixed_address.call()"
}, },
@ -75,7 +75,7 @@
"type": "Informational", "type": "Informational",
"address": 779, "address": 779,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/calls.sol", "filename": "<TESTDATA>/inputs/calls.sol",
"lineno": 29, "lineno": 29,
"code": "stored_address.call()" "code": "stored_address.call()"
}, },
@ -86,7 +86,7 @@
"type": "Informational", "type": "Informational",
"address": 858, "address": 858,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/calls.sol", "filename": "<TESTDATA>/inputs/calls.sol",
"lineno": 20, "lineno": 20,
"code": "fixed_address.call()" "code": "fixed_address.call()"
}, },
@ -97,9 +97,9 @@
"type": "Informational", "type": "Informational",
"address": 912, "address": 912,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/calls.sol", "filename": "<TESTDATA>/inputs/calls.sol",
"lineno": 25, "lineno": 25,
"code": "addr.call()" "code": "addr.call()"
} }
] ]
} }

@ -8,7 +8,7 @@
### Description ### Description
This contract executes a message call to to another contract. Make sure that the called contract is trusted and does not execute user-supplied code. This contract executes a message call to to another contract. Make sure that the called contract is trusted and does not execute user-supplied code.
In *<TEST_FILES>/inputs/calls.sol:16* In *<TESTDATA>/inputs/calls.sol:16*
``` ```
fixed_address.call() fixed_address.call()
@ -22,7 +22,7 @@ fixed_address.call()
### Description ### Description
This contract executes a message call to an address found at storage slot 1. This storage slot can be written to by calling the function '_function_0x2776b163'. Generally, it is not recommended to call user-supplied adresses using Solidity's call() construct. Note that attackers might leverage reentrancy attacks to exploit race conditions or manipulate this contract's state. This contract executes a message call to an address found at storage slot 1. This storage slot can be written to by calling the function '_function_0x2776b163'. Generally, it is not recommended to call user-supplied adresses using Solidity's call() construct. Note that attackers might leverage reentrancy attacks to exploit race conditions or manipulate this contract's state.
In *<TEST_FILES>/inputs/calls.sol:29* In *<TESTDATA>/inputs/calls.sol:29*
``` ```
stored_address.call() stored_address.call()
@ -36,7 +36,7 @@ stored_address.call()
### Description ### Description
This contract executes a message call to to another contract. Make sure that the called contract is trusted and does not execute user-supplied code. This contract executes a message call to to another contract. Make sure that the called contract is trusted and does not execute user-supplied code.
In *<TEST_FILES>/inputs/calls.sol:20* In *<TESTDATA>/inputs/calls.sol:20*
``` ```
fixed_address.call() fixed_address.call()
@ -50,7 +50,7 @@ fixed_address.call()
### Description ### Description
The contract account state is changed after an external call. Consider that the called contract could re-enter the function before this state change takes place. This can lead to business logic vulnerabilities. The contract account state is changed after an external call. Consider that the called contract could re-enter the function before this state change takes place. This can lead to business logic vulnerabilities.
In *<TEST_FILES>/inputs/calls.sol:21* In *<TESTDATA>/inputs/calls.sol:21*
``` ```
statevar = 0 statevar = 0
@ -64,7 +64,7 @@ statevar = 0
### Description ### Description
This contract executes a message call to an address provided as a function argument. Generally, it is not recommended to call user-supplied adresses using Solidity's call() construct. Note that attackers might leverage reentrancy attacks to exploit race conditions or manipulate this contract's state. This contract executes a message call to an address provided as a function argument. Generally, it is not recommended to call user-supplied adresses using Solidity's call() construct. Note that attackers might leverage reentrancy attacks to exploit race conditions or manipulate this contract's state.
In *<TEST_FILES>/inputs/calls.sol:25* In *<TESTDATA>/inputs/calls.sol:25*
``` ```
addr.call() addr.call()
@ -78,7 +78,7 @@ addr.call()
### Description ### Description
The return value of an external call is not checked. Note that execution continue even if the called contract throws. The return value of an external call is not checked. Note that execution continue even if the called contract throws.
In *<TEST_FILES>/inputs/calls.sol:16* In *<TESTDATA>/inputs/calls.sol:16*
``` ```
fixed_address.call() fixed_address.call()
@ -92,7 +92,7 @@ fixed_address.call()
### Description ### Description
The return value of an external call is not checked. Note that execution continue even if the called contract throws. The return value of an external call is not checked. Note that execution continue even if the called contract throws.
In *<TEST_FILES>/inputs/calls.sol:29* In *<TESTDATA>/inputs/calls.sol:29*
``` ```
stored_address.call() stored_address.call()
@ -106,7 +106,7 @@ stored_address.call()
### Description ### Description
The return value of an external call is not checked. Note that execution continue even if the called contract throws. The return value of an external call is not checked. Note that execution continue even if the called contract throws.
In *<TEST_FILES>/inputs/calls.sol:20* In *<TESTDATA>/inputs/calls.sol:20*
``` ```
fixed_address.call() fixed_address.call()
@ -120,7 +120,7 @@ fixed_address.call()
### Description ### Description
The return value of an external call is not checked. Note that execution continue even if the called contract throws. The return value of an external call is not checked. Note that execution continue even if the called contract throws.
In *<TEST_FILES>/inputs/calls.sol:25* In *<TESTDATA>/inputs/calls.sol:25*
``` ```
addr.call() addr.call()

@ -5,7 +5,7 @@ Function name: _function_0x5a6814ec
PC address: 661 PC address: 661
This contract executes a message call to to another contract. Make sure that the called contract is trusted and does not execute user-supplied code. This contract executes a message call to to another contract. Make sure that the called contract is trusted and does not execute user-supplied code.
-------------------- --------------------
In file: <TEST_FILES>/inputs/calls.sol:16 In file: <TESTDATA>/inputs/calls.sol:16
fixed_address.call() fixed_address.call()
@ -18,7 +18,7 @@ Function name: _function_0xd24b08cc
PC address: 779 PC address: 779
This contract executes a message call to an address found at storage slot 1. This storage slot can be written to by calling the function '_function_0x2776b163'. Generally, it is not recommended to call user-supplied adresses using Solidity's call() construct. Note that attackers might leverage reentrancy attacks to exploit race conditions or manipulate this contract's state. This contract executes a message call to an address found at storage slot 1. This storage slot can be written to by calling the function '_function_0x2776b163'. Generally, it is not recommended to call user-supplied adresses using Solidity's call() construct. Note that attackers might leverage reentrancy attacks to exploit race conditions or manipulate this contract's state.
-------------------- --------------------
In file: <TEST_FILES>/inputs/calls.sol:29 In file: <TESTDATA>/inputs/calls.sol:29
stored_address.call() stored_address.call()
@ -31,7 +31,7 @@ Function name: _function_0xe11f493e
PC address: 858 PC address: 858
This contract executes a message call to to another contract. Make sure that the called contract is trusted and does not execute user-supplied code. This contract executes a message call to to another contract. Make sure that the called contract is trusted and does not execute user-supplied code.
-------------------- --------------------
In file: <TEST_FILES>/inputs/calls.sol:20 In file: <TESTDATA>/inputs/calls.sol:20
fixed_address.call() fixed_address.call()
@ -44,7 +44,7 @@ Function name: _function_0xe11f493e
PC address: 869 PC address: 869
The contract account state is changed after an external call. Consider that the called contract could re-enter the function before this state change takes place. This can lead to business logic vulnerabilities. The contract account state is changed after an external call. Consider that the called contract could re-enter the function before this state change takes place. This can lead to business logic vulnerabilities.
-------------------- --------------------
In file: <TEST_FILES>/inputs/calls.sol:21 In file: <TESTDATA>/inputs/calls.sol:21
statevar = 0 statevar = 0
@ -57,7 +57,7 @@ Function name: _function_0xe1d10f79
PC address: 912 PC address: 912
This contract executes a message call to an address provided as a function argument. Generally, it is not recommended to call user-supplied adresses using Solidity's call() construct. Note that attackers might leverage reentrancy attacks to exploit race conditions or manipulate this contract's state. This contract executes a message call to an address provided as a function argument. Generally, it is not recommended to call user-supplied adresses using Solidity's call() construct. Note that attackers might leverage reentrancy attacks to exploit race conditions or manipulate this contract's state.
-------------------- --------------------
In file: <TEST_FILES>/inputs/calls.sol:25 In file: <TESTDATA>/inputs/calls.sol:25
addr.call() addr.call()
@ -70,7 +70,7 @@ Function name: _function_0x5a6814ec
PC address: 661 PC address: 661
The return value of an external call is not checked. Note that execution continue even if the called contract throws. The return value of an external call is not checked. Note that execution continue even if the called contract throws.
-------------------- --------------------
In file: <TEST_FILES>/inputs/calls.sol:16 In file: <TESTDATA>/inputs/calls.sol:16
fixed_address.call() fixed_address.call()
@ -83,7 +83,7 @@ Function name: _function_0xd24b08cc
PC address: 779 PC address: 779
The return value of an external call is not checked. Note that execution continue even if the called contract throws. The return value of an external call is not checked. Note that execution continue even if the called contract throws.
-------------------- --------------------
In file: <TEST_FILES>/inputs/calls.sol:29 In file: <TESTDATA>/inputs/calls.sol:29
stored_address.call() stored_address.call()
@ -96,7 +96,7 @@ Function name: _function_0xe11f493e
PC address: 858 PC address: 858
The return value of an external call is not checked. Note that execution continue even if the called contract throws. The return value of an external call is not checked. Note that execution continue even if the called contract throws.
-------------------- --------------------
In file: <TEST_FILES>/inputs/calls.sol:20 In file: <TESTDATA>/inputs/calls.sol:20
fixed_address.call() fixed_address.call()
@ -109,7 +109,7 @@ Function name: _function_0xe1d10f79
PC address: 912 PC address: 912
The return value of an external call is not checked. Note that execution continue even if the called contract throws. The return value of an external call is not checked. Note that execution continue even if the called contract throws.
-------------------- --------------------
In file: <TEST_FILES>/inputs/calls.sol:25 In file: <TESTDATA>/inputs/calls.sol:25
addr.call() addr.call()

@ -9,9 +9,9 @@
"type": "Warning", "type": "Warning",
"address": 816, "address": 816,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/ether_send.sol", "filename": "<TESTDATA>/inputs/ether_send.sol",
"lineno": 18, "lineno": 18,
"code": "msg.sender.transfer(this.balance)" "code": "msg.sender.transfer(this.balance)"
} }
] ]
} }

@ -10,7 +10,7 @@ In the function 'withdrawfunds()' a non-zero amount of Ether is sent to msg.send
There is a check on storage index 1. This storage slot can be written to by calling the function 'crowdfunding()'. There is a check on storage index 1. This storage slot can be written to by calling the function 'crowdfunding()'.
In *<TEST_FILES>/inputs/ether_send.sol:18* In *<TESTDATA>/inputs/ether_send.sol:18*
``` ```
msg.sender.transfer(this.balance) msg.sender.transfer(this.balance)

@ -7,7 +7,7 @@ In the function 'withdrawfunds()' a non-zero amount of Ether is sent to msg.send
There is a check on storage index 1. This storage slot can be written to by calling the function 'crowdfunding()'. There is a check on storage index 1. This storage slot can be written to by calling the function 'crowdfunding()'.
-------------------- --------------------
In file: <TEST_FILES>/inputs/ether_send.sol:18 In file: <TESTDATA>/inputs/ether_send.sol:18
msg.sender.transfer(this.balance) msg.sender.transfer(this.balance)

@ -9,7 +9,7 @@
"type": "Informational", "type": "Informational",
"address": 446, "address": 446,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/exceptions.sol", "filename": "<TESTDATA>/inputs/exceptions.sol",
"lineno": 16, "lineno": 16,
"code": "assert(input != 23)" "code": "assert(input != 23)"
}, },
@ -20,7 +20,7 @@
"type": "Informational", "type": "Informational",
"address": 484, "address": 484,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/exceptions.sol", "filename": "<TESTDATA>/inputs/exceptions.sol",
"lineno": 34, "lineno": 34,
"code": "myarray[index]" "code": "myarray[index]"
}, },
@ -31,7 +31,7 @@
"type": "Informational", "type": "Informational",
"address": 506, "address": 506,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/exceptions.sol", "filename": "<TESTDATA>/inputs/exceptions.sol",
"lineno": 24, "lineno": 24,
"code": "1/input" "code": "1/input"
}, },
@ -42,9 +42,9 @@
"type": "Informational", "type": "Informational",
"address": 531, "address": 531,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/exceptions.sol", "filename": "<TESTDATA>/inputs/exceptions.sol",
"lineno": 7, "lineno": 7,
"code": "assert(i == 0)" "code": "assert(i == 0)"
} }
] ]
} }

@ -8,7 +8,7 @@
### Description ### Description
A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking. A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking.
In *<TEST_FILES>/inputs/exceptions.sol:16* In *<TESTDATA>/inputs/exceptions.sol:16*
``` ```
assert(input != 23) assert(input != 23)
@ -22,7 +22,7 @@ assert(input != 23)
### Description ### Description
A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking. A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking.
In *<TEST_FILES>/inputs/exceptions.sol:34* In *<TESTDATA>/inputs/exceptions.sol:34*
``` ```
myarray[index] myarray[index]
@ -36,7 +36,7 @@ myarray[index]
### Description ### Description
A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking. A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking.
In *<TEST_FILES>/inputs/exceptions.sol:24* In *<TESTDATA>/inputs/exceptions.sol:24*
``` ```
1/input 1/input
@ -50,7 +50,7 @@ In *<TEST_FILES>/inputs/exceptions.sol:24*
### Description ### Description
A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking. A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking.
In *<TEST_FILES>/inputs/exceptions.sol:7* In *<TESTDATA>/inputs/exceptions.sol:7*
``` ```
assert(i == 0) assert(i == 0)

@ -5,7 +5,7 @@ Function name: _function_0x546455b5
PC address: 446 PC address: 446
A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking. A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking.
-------------------- --------------------
In file: <TEST_FILES>/inputs/exceptions.sol:16 In file: <TESTDATA>/inputs/exceptions.sol:16
assert(input != 23) assert(input != 23)
@ -18,7 +18,7 @@ Function name: _function_0x92dd38ea
PC address: 484 PC address: 484
A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking. A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking.
-------------------- --------------------
In file: <TEST_FILES>/inputs/exceptions.sol:34 In file: <TESTDATA>/inputs/exceptions.sol:34
myarray[index] myarray[index]
@ -31,7 +31,7 @@ Function name: _function_0xa08299f1
PC address: 506 PC address: 506
A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking. A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking.
-------------------- --------------------
In file: <TEST_FILES>/inputs/exceptions.sol:24 In file: <TESTDATA>/inputs/exceptions.sol:24
1/input 1/input
@ -44,7 +44,7 @@ Function name: _function_0xb34c3610
PC address: 531 PC address: 531
A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking. A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking.
-------------------- --------------------
In file: <TEST_FILES>/inputs/exceptions.sol:7 In file: <TESTDATA>/inputs/exceptions.sol:7
assert(i == 0) assert(i == 0)

@ -9,7 +9,7 @@
"type": "Warning", "type": "Warning",
"address": 1038, "address": 1038,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/kinds_of_calls.sol", "filename": "<TESTDATA>/inputs/kinds_of_calls.sol",
"lineno": 6, "lineno": 6,
"code": "_e.call(bytes4(sha3(\"setN(uint256)\")), _n)" "code": "_e.call(bytes4(sha3(\"setN(uint256)\")), _n)"
}, },
@ -20,9 +20,9 @@
"type": "Informational", "type": "Informational",
"address": 1038, "address": 1038,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/kinds_of_calls.sol", "filename": "<TESTDATA>/inputs/kinds_of_calls.sol",
"lineno": 6, "lineno": 6,
"code": "_e.call(bytes4(sha3(\"setN(uint256)\")), _n)" "code": "_e.call(bytes4(sha3(\"setN(uint256)\")), _n)"
} }
] ]
} }

@ -8,7 +8,7 @@
### Description ### Description
This contract executes a message call to an address provided as a function argument. Generally, it is not recommended to call user-supplied adresses using Solidity's call() construct. Note that attackers might leverage reentrancy attacks to exploit race conditions or manipulate this contract's state. This contract executes a message call to an address provided as a function argument. Generally, it is not recommended to call user-supplied adresses using Solidity's call() construct. Note that attackers might leverage reentrancy attacks to exploit race conditions or manipulate this contract's state.
In *<TEST_FILES>/inputs/kinds_of_calls.sol:6* In *<TESTDATA>/inputs/kinds_of_calls.sol:6*
``` ```
_e.call(bytes4(sha3("setN(uint256)")), _n) _e.call(bytes4(sha3("setN(uint256)")), _n)
@ -22,7 +22,7 @@ _e.call(bytes4(sha3("setN(uint256)")), _n)
### Description ### Description
The return value of an external call is not checked. Note that execution continue even if the called contract throws. The return value of an external call is not checked. Note that execution continue even if the called contract throws.
In *<TEST_FILES>/inputs/kinds_of_calls.sol:6* In *<TESTDATA>/inputs/kinds_of_calls.sol:6*
``` ```
_e.call(bytes4(sha3("setN(uint256)")), _n) _e.call(bytes4(sha3("setN(uint256)")), _n)

@ -5,7 +5,7 @@ Function name: _function_0xeea4c864
PC address: 1038 PC address: 1038
This contract executes a message call to an address provided as a function argument. Generally, it is not recommended to call user-supplied adresses using Solidity's call() construct. Note that attackers might leverage reentrancy attacks to exploit race conditions or manipulate this contract's state. This contract executes a message call to an address provided as a function argument. Generally, it is not recommended to call user-supplied adresses using Solidity's call() construct. Note that attackers might leverage reentrancy attacks to exploit race conditions or manipulate this contract's state.
-------------------- --------------------
In file: <TEST_FILES>/inputs/kinds_of_calls.sol:6 In file: <TESTDATA>/inputs/kinds_of_calls.sol:6
_e.call(bytes4(sha3("setN(uint256)")), _n) _e.call(bytes4(sha3("setN(uint256)")), _n)
@ -18,7 +18,7 @@ Function name: _function_0xeea4c864
PC address: 1038 PC address: 1038
The return value of an external call is not checked. Note that execution continue even if the called contract throws. The return value of an external call is not checked. Note that execution continue even if the called contract throws.
-------------------- --------------------
In file: <TEST_FILES>/inputs/kinds_of_calls.sol:6 In file: <TESTDATA>/inputs/kinds_of_calls.sol:6
_e.call(bytes4(sha3("setN(uint256)")), _n) _e.call(bytes4(sha3("setN(uint256)")), _n)

@ -9,9 +9,9 @@
"type": "Warning", "type": "Warning",
"address": 142, "address": 142,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/multi_contracts.sol", "filename": "<TESTDATA>/inputs/multi_contracts.sol",
"lineno": 14, "lineno": 14,
"code": "msg.sender.transfer(2 ether)" "code": "msg.sender.transfer(2 ether)"
} }
] ]
} }

@ -9,7 +9,7 @@
In the function '_function_0x8a4068dd' a non-zero amount of Ether is sent to msg.sender. In the function '_function_0x8a4068dd' a non-zero amount of Ether is sent to msg.sender.
It seems that this function can be called without restrictions. It seems that this function can be called without restrictions.
In *<TEST_FILES>/inputs/multi_contracts.sol:14* In *<TESTDATA>/inputs/multi_contracts.sol:14*
``` ```
msg.sender.transfer(2 ether) msg.sender.transfer(2 ether)

@ -6,7 +6,7 @@ PC address: 142
In the function '_function_0x8a4068dd' a non-zero amount of Ether is sent to msg.sender. In the function '_function_0x8a4068dd' a non-zero amount of Ether is sent to msg.sender.
It seems that this function can be called without restrictions. It seems that this function can be called without restrictions.
-------------------- --------------------
In file: <TEST_FILES>/inputs/multi_contracts.sol:14 In file: <TESTDATA>/inputs/multi_contracts.sol:14
msg.sender.transfer(2 ether) msg.sender.transfer(2 ether)

@ -9,9 +9,9 @@
"type": "Warning", "type": "Warning",
"address": 317, "address": 317,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/origin.sol", "filename": "<TESTDATA>/inputs/origin.sol",
"lineno": 18, "lineno": 18,
"code": "tx.origin" "code": "tx.origin"
} }
] ]
} }

@ -9,7 +9,7 @@
Function transferOwnership(address) retrieves the transaction origin (tx.origin) using the ORIGIN opcode. Use tx.sender instead. Function transferOwnership(address) retrieves the transaction origin (tx.origin) using the ORIGIN opcode. Use tx.sender instead.
See also: https://solidity.readthedocs.io/en/develop/security-considerations.html#tx-origin See also: https://solidity.readthedocs.io/en/develop/security-considerations.html#tx-origin
In *<TEST_FILES>/inputs/origin.sol:18* In *<TESTDATA>/inputs/origin.sol:18*
``` ```
tx.origin tx.origin

@ -6,7 +6,7 @@ PC address: 317
Function transferOwnership(address) retrieves the transaction origin (tx.origin) using the ORIGIN opcode. Use tx.sender instead. Function transferOwnership(address) retrieves the transaction origin (tx.origin) using the ORIGIN opcode. Use tx.sender instead.
See also: https://solidity.readthedocs.io/en/develop/security-considerations.html#tx-origin See also: https://solidity.readthedocs.io/en/develop/security-considerations.html#tx-origin
-------------------- --------------------
In file: <TEST_FILES>/inputs/origin.sol:18 In file: <TESTDATA>/inputs/origin.sol:18
tx.origin tx.origin

@ -9,7 +9,7 @@
"type": "Informational", "type": "Informational",
"address": 196, "address": 196,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/returnvalue.sol", "filename": "<TESTDATA>/inputs/returnvalue.sol",
"lineno": 10, "lineno": 10,
"code": "callee.call()" "code": "callee.call()"
}, },
@ -20,7 +20,7 @@
"type": "Informational", "type": "Informational",
"address": 285, "address": 285,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/returnvalue.sol", "filename": "<TESTDATA>/inputs/returnvalue.sol",
"lineno": 6, "lineno": 6,
"code": "callee.call()" "code": "callee.call()"
}, },
@ -31,9 +31,9 @@
"type": "Informational", "type": "Informational",
"address": 285, "address": 285,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/returnvalue.sol", "filename": "<TESTDATA>/inputs/returnvalue.sol",
"lineno": 6, "lineno": 6,
"code": "callee.call()" "code": "callee.call()"
} }
] ]
} }

@ -8,7 +8,7 @@
### Description ### Description
This contract executes a message call to to another contract. Make sure that the called contract is trusted and does not execute user-supplied code. This contract executes a message call to to another contract. Make sure that the called contract is trusted and does not execute user-supplied code.
In *<TEST_FILES>/inputs/returnvalue.sol:10* In *<TESTDATA>/inputs/returnvalue.sol:10*
``` ```
callee.call() callee.call()
@ -22,7 +22,7 @@ callee.call()
### Description ### Description
This contract executes a message call to to another contract. Make sure that the called contract is trusted and does not execute user-supplied code. This contract executes a message call to to another contract. Make sure that the called contract is trusted and does not execute user-supplied code.
In *<TEST_FILES>/inputs/returnvalue.sol:6* In *<TESTDATA>/inputs/returnvalue.sol:6*
``` ```
callee.call() callee.call()
@ -36,7 +36,7 @@ callee.call()
### Description ### Description
The return value of an external call is not checked. Note that execution continue even if the called contract throws. The return value of an external call is not checked. Note that execution continue even if the called contract throws.
In *<TEST_FILES>/inputs/returnvalue.sol:6* In *<TESTDATA>/inputs/returnvalue.sol:6*
``` ```
callee.call() callee.call()

@ -5,7 +5,7 @@ Function name: _function_0x633ab5e0
PC address: 196 PC address: 196
This contract executes a message call to to another contract. Make sure that the called contract is trusted and does not execute user-supplied code. This contract executes a message call to to another contract. Make sure that the called contract is trusted and does not execute user-supplied code.
-------------------- --------------------
In file: <TEST_FILES>/inputs/returnvalue.sol:10 In file: <TESTDATA>/inputs/returnvalue.sol:10
callee.call() callee.call()
@ -18,7 +18,7 @@ Function name: _function_0xe3bea282
PC address: 285 PC address: 285
This contract executes a message call to to another contract. Make sure that the called contract is trusted and does not execute user-supplied code. This contract executes a message call to to another contract. Make sure that the called contract is trusted and does not execute user-supplied code.
-------------------- --------------------
In file: <TEST_FILES>/inputs/returnvalue.sol:6 In file: <TESTDATA>/inputs/returnvalue.sol:6
callee.call() callee.call()
@ -31,7 +31,7 @@ Function name: _function_0xe3bea282
PC address: 285 PC address: 285
The return value of an external call is not checked. Note that execution continue even if the called contract throws. The return value of an external call is not checked. Note that execution continue even if the called contract throws.
-------------------- --------------------
In file: <TEST_FILES>/inputs/returnvalue.sol:6 In file: <TESTDATA>/inputs/returnvalue.sol:6
callee.call() callee.call()

@ -9,7 +9,7 @@
"type": "Warning", "type": "Warning",
"address": 1599, "address": 1599,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/rubixi.sol", "filename": "<TESTDATA>/inputs/rubixi.sol",
"lineno": 93, "lineno": 93,
"code": "creator.send(feesToCollect)" "code": "creator.send(feesToCollect)"
}, },
@ -20,7 +20,7 @@
"type": "Warning", "type": "Warning",
"address": 1940, "address": 1940,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/rubixi.sol", "filename": "<TESTDATA>/inputs/rubixi.sol",
"lineno": 75, "lineno": 75,
"code": "creator.send(collectedFees)" "code": "creator.send(collectedFees)"
}, },
@ -31,7 +31,7 @@
"type": "Informational", "type": "Informational",
"address": 1653, "address": 1653,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/rubixi.sol", "filename": "<TESTDATA>/inputs/rubixi.sol",
"lineno": 131, "lineno": 131,
"code": "participants[payoutOrder]" "code": "participants[payoutOrder]"
}, },
@ -42,7 +42,7 @@
"type": "Informational", "type": "Informational",
"address": 2085, "address": 2085,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/rubixi.sol", "filename": "<TESTDATA>/inputs/rubixi.sol",
"lineno": 148, "lineno": 148,
"code": "participants[orderInPyramid]" "code": "participants[orderInPyramid]"
}, },
@ -53,7 +53,7 @@
"type": "Warning", "type": "Warning",
"address": 2743, "address": 2743,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/rubixi.sol", "filename": "<TESTDATA>/inputs/rubixi.sol",
"lineno": 143, "lineno": 143,
"code": "participants.length - payoutOrder" "code": "participants.length - payoutOrder"
}, },
@ -64,7 +64,7 @@
"type": "Informational", "type": "Informational",
"address": 1599, "address": 1599,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/rubixi.sol", "filename": "<TESTDATA>/inputs/rubixi.sol",
"lineno": 93, "lineno": 93,
"code": "creator.send(feesToCollect)" "code": "creator.send(feesToCollect)"
}, },
@ -75,7 +75,7 @@
"type": "Informational", "type": "Informational",
"address": 1940, "address": 1940,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/rubixi.sol", "filename": "<TESTDATA>/inputs/rubixi.sol",
"lineno": 75, "lineno": 75,
"code": "creator.send(collectedFees)" "code": "creator.send(collectedFees)"
}, },
@ -86,9 +86,9 @@
"type": "Informational", "type": "Informational",
"address": 2582, "address": 2582,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/rubixi.sol", "filename": "<TESTDATA>/inputs/rubixi.sol",
"lineno": 85, "lineno": 85,
"code": "creator.send(_amt)" "code": "creator.send(_amt)"
} }
] ]
} }

@ -12,7 +12,7 @@ There is a check on storage index 5. This storage slot can be written to by call
There is a check on storage index 5. This storage slot can be written to by calling the function '_function_0x67f809e9'. There is a check on storage index 5. This storage slot can be written to by calling the function '_function_0x67f809e9'.
There is a check on storage index 1. This storage slot can be written to by calling the function 'fallback'. There is a check on storage index 1. This storage slot can be written to by calling the function 'fallback'.
In *<TEST_FILES>/inputs/rubixi.sol:93* In *<TESTDATA>/inputs/rubixi.sol:93*
``` ```
creator.send(feesToCollect) creator.send(feesToCollect)
@ -30,7 +30,7 @@ There is a check on storage index 5. This storage slot can be written to by call
There is a check on storage index 5. This storage slot can be written to by calling the function '_function_0x67f809e9'. There is a check on storage index 5. This storage slot can be written to by calling the function '_function_0x67f809e9'.
There is a check on storage index 1. This storage slot can be written to by calling the function 'fallback'. There is a check on storage index 1. This storage slot can be written to by calling the function 'fallback'.
In *<TEST_FILES>/inputs/rubixi.sol:75* In *<TESTDATA>/inputs/rubixi.sol:75*
``` ```
creator.send(collectedFees) creator.send(collectedFees)
@ -44,7 +44,7 @@ creator.send(collectedFees)
### Description ### Description
A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking. A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking.
In *<TEST_FILES>/inputs/rubixi.sol:131* In *<TESTDATA>/inputs/rubixi.sol:131*
``` ```
participants[payoutOrder] participants[payoutOrder]
@ -58,7 +58,7 @@ participants[payoutOrder]
### Description ### Description
A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking. A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking.
In *<TEST_FILES>/inputs/rubixi.sol:148* In *<TESTDATA>/inputs/rubixi.sol:148*
``` ```
participants[orderInPyramid] participants[orderInPyramid]
@ -73,7 +73,7 @@ participants[orderInPyramid]
A possible integer underflow exists in the function _function_0xd11f13df. A possible integer underflow exists in the function _function_0xd11f13df.
The substraction may result in a value < 0. The substraction may result in a value < 0.
In *<TEST_FILES>/inputs/rubixi.sol:143* In *<TESTDATA>/inputs/rubixi.sol:143*
``` ```
participants.length - payoutOrder participants.length - payoutOrder
@ -87,7 +87,7 @@ participants.length - payoutOrder
### Description ### Description
The return value of an external call is not checked. Note that execution continue even if the called contract throws. The return value of an external call is not checked. Note that execution continue even if the called contract throws.
In *<TEST_FILES>/inputs/rubixi.sol:93* In *<TESTDATA>/inputs/rubixi.sol:93*
``` ```
creator.send(feesToCollect) creator.send(feesToCollect)
@ -101,7 +101,7 @@ creator.send(feesToCollect)
### Description ### Description
The return value of an external call is not checked. Note that execution continue even if the called contract throws. The return value of an external call is not checked. Note that execution continue even if the called contract throws.
In *<TEST_FILES>/inputs/rubixi.sol:75* In *<TESTDATA>/inputs/rubixi.sol:75*
``` ```
creator.send(collectedFees) creator.send(collectedFees)
@ -115,7 +115,7 @@ creator.send(collectedFees)
### Description ### Description
The return value of an external call is not checked. Note that execution continue even if the called contract throws. The return value of an external call is not checked. Note that execution continue even if the called contract throws.
In *<TEST_FILES>/inputs/rubixi.sol:85* In *<TESTDATA>/inputs/rubixi.sol:85*
``` ```
creator.send(_amt) creator.send(_amt)

@ -9,7 +9,7 @@ There is a check on storage index 5. This storage slot can be written to by call
There is a check on storage index 5. This storage slot can be written to by calling the function '_function_0x67f809e9'. There is a check on storage index 5. This storage slot can be written to by calling the function '_function_0x67f809e9'.
There is a check on storage index 1. This storage slot can be written to by calling the function 'fallback'. There is a check on storage index 1. This storage slot can be written to by calling the function 'fallback'.
-------------------- --------------------
In file: <TEST_FILES>/inputs/rubixi.sol:93 In file: <TESTDATA>/inputs/rubixi.sol:93
creator.send(feesToCollect) creator.send(feesToCollect)
@ -26,7 +26,7 @@ There is a check on storage index 5. This storage slot can be written to by call
There is a check on storage index 5. This storage slot can be written to by calling the function '_function_0x67f809e9'. There is a check on storage index 5. This storage slot can be written to by calling the function '_function_0x67f809e9'.
There is a check on storage index 1. This storage slot can be written to by calling the function 'fallback'. There is a check on storage index 1. This storage slot can be written to by calling the function 'fallback'.
-------------------- --------------------
In file: <TEST_FILES>/inputs/rubixi.sol:75 In file: <TESTDATA>/inputs/rubixi.sol:75
creator.send(collectedFees) creator.send(collectedFees)
@ -39,7 +39,7 @@ Function name: _function_0x57d4021b
PC address: 1653 PC address: 1653
A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking. A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking.
-------------------- --------------------
In file: <TEST_FILES>/inputs/rubixi.sol:131 In file: <TESTDATA>/inputs/rubixi.sol:131
participants[payoutOrder] participants[payoutOrder]
@ -52,7 +52,7 @@ Function name: _function_0x9dbc4f9b
PC address: 2085 PC address: 2085
A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking. A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking.
-------------------- --------------------
In file: <TEST_FILES>/inputs/rubixi.sol:148 In file: <TESTDATA>/inputs/rubixi.sol:148
participants[orderInPyramid] participants[orderInPyramid]
@ -66,7 +66,7 @@ PC address: 2743
A possible integer underflow exists in the function _function_0xd11f13df. A possible integer underflow exists in the function _function_0xd11f13df.
The substraction may result in a value < 0. The substraction may result in a value < 0.
-------------------- --------------------
In file: <TEST_FILES>/inputs/rubixi.sol:143 In file: <TESTDATA>/inputs/rubixi.sol:143
participants.length - payoutOrder participants.length - payoutOrder
@ -79,7 +79,7 @@ Function name: _function_0x4229616d
PC address: 1599 PC address: 1599
The return value of an external call is not checked. Note that execution continue even if the called contract throws. The return value of an external call is not checked. Note that execution continue even if the called contract throws.
-------------------- --------------------
In file: <TEST_FILES>/inputs/rubixi.sol:93 In file: <TESTDATA>/inputs/rubixi.sol:93
creator.send(feesToCollect) creator.send(feesToCollect)
@ -92,7 +92,7 @@ Function name: _function_0xb4022950
PC address: 1940 PC address: 1940
The return value of an external call is not checked. Note that execution continue even if the called contract throws. The return value of an external call is not checked. Note that execution continue even if the called contract throws.
-------------------- --------------------
In file: <TEST_FILES>/inputs/rubixi.sol:75 In file: <TESTDATA>/inputs/rubixi.sol:75
creator.send(collectedFees) creator.send(collectedFees)
@ -105,7 +105,7 @@ Function name: _function_0xb4022950
PC address: 2582 PC address: 2582
The return value of an external call is not checked. Note that execution continue even if the called contract throws. The return value of an external call is not checked. Note that execution continue even if the called contract throws.
-------------------- --------------------
In file: <TEST_FILES>/inputs/rubixi.sol:85 In file: <TESTDATA>/inputs/rubixi.sol:85
creator.send(_amt) creator.send(_amt)

@ -9,9 +9,9 @@
"type": "Warning", "type": "Warning",
"address": 146, "address": 146,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/suicide.sol", "filename": "<TESTDATA>/inputs/suicide.sol",
"lineno": 4, "lineno": 4,
"code": "selfdestruct(addr)" "code": "selfdestruct(addr)"
} }
] ]
} }

@ -10,7 +10,7 @@ The function _function_0xcbf0b0c0 executes the SUICIDE instruction. The remainin
It seems that this function can be called without restrictions. It seems that this function can be called without restrictions.
In *<TEST_FILES>/inputs/suicide.sol:4* In *<TESTDATA>/inputs/suicide.sol:4*
``` ```
selfdestruct(addr) selfdestruct(addr)

@ -7,7 +7,7 @@ The function _function_0xcbf0b0c0 executes the SUICIDE instruction. The remainin
It seems that this function can be called without restrictions. It seems that this function can be called without restrictions.
-------------------- --------------------
In file: <TEST_FILES>/inputs/suicide.sol:4 In file: <TESTDATA>/inputs/suicide.sol:4
selfdestruct(addr) selfdestruct(addr)

@ -9,7 +9,7 @@
"type": "Warning", "type": "Warning",
"address": 649, "address": 649,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/underflow.sol", "filename": "<TESTDATA>/inputs/underflow.sol",
"lineno": 12, "lineno": 12,
"code": "balances[msg.sender] -= _value" "code": "balances[msg.sender] -= _value"
}, },
@ -20,9 +20,9 @@
"type": "Warning", "type": "Warning",
"address": 567, "address": 567,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/underflow.sol", "filename": "<TESTDATA>/inputs/underflow.sol",
"lineno": 11, "lineno": 11,
"code": "balances[msg.sender] - _value" "code": "balances[msg.sender] - _value"
} }
] ]
} }

@ -9,7 +9,7 @@
A possible integer underflow exists in the function sendeth(address,uint256). A possible integer underflow exists in the function sendeth(address,uint256).
The substraction may result in a value < 0. The substraction may result in a value < 0.
In *<TEST_FILES>/inputs/underflow.sol:12* In *<TESTDATA>/inputs/underflow.sol:12*
``` ```
balances[msg.sender] -= _value balances[msg.sender] -= _value
@ -24,7 +24,7 @@ balances[msg.sender] -= _value
A possible integer underflow exists in the function sendeth(address,uint256). A possible integer underflow exists in the function sendeth(address,uint256).
The substraction may result in a value < 0. The substraction may result in a value < 0.
In *<TEST_FILES>/inputs/underflow.sol:11* In *<TESTDATA>/inputs/underflow.sol:11*
``` ```
balances[msg.sender] - _value balances[msg.sender] - _value

@ -6,7 +6,7 @@ PC address: 649
A possible integer underflow exists in the function sendeth(address,uint256). A possible integer underflow exists in the function sendeth(address,uint256).
The substraction may result in a value < 0. The substraction may result in a value < 0.
-------------------- --------------------
In file: <TEST_FILES>/inputs/underflow.sol:12 In file: <TESTDATA>/inputs/underflow.sol:12
balances[msg.sender] -= _value balances[msg.sender] -= _value
@ -20,7 +20,7 @@ PC address: 567
A possible integer underflow exists in the function sendeth(address,uint256). A possible integer underflow exists in the function sendeth(address,uint256).
The substraction may result in a value < 0. The substraction may result in a value < 0.
-------------------- --------------------
In file: <TEST_FILES>/inputs/underflow.sol:11 In file: <TESTDATA>/inputs/underflow.sol:11
balances[msg.sender] - _value balances[msg.sender] - _value

@ -9,7 +9,7 @@
"type": "Warning", "type": "Warning",
"address": 1285, "address": 1285,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/weak_random.sol", "filename": "<TESTDATA>/inputs/weak_random.sol",
"lineno": 47, "lineno": 47,
"code": "winningAddress.transfer(prize)" "code": "winningAddress.transfer(prize)"
}, },
@ -20,7 +20,7 @@
"type": "Warning", "type": "Warning",
"address": 1285, "address": 1285,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/weak_random.sol", "filename": "<TESTDATA>/inputs/weak_random.sol",
"lineno": 47, "lineno": 47,
"code": "winningAddress.transfer(prize)" "code": "winningAddress.transfer(prize)"
}, },
@ -31,7 +31,7 @@
"type": "Informational", "type": "Informational",
"address": 356, "address": 356,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/weak_random.sol", "filename": "<TESTDATA>/inputs/weak_random.sol",
"lineno": 11, "lineno": 11,
"code": "prize / totalTickets" "code": "prize / totalTickets"
}, },
@ -42,9 +42,9 @@
"type": "Informational", "type": "Informational",
"address": 146, "address": 146,
"debug": "<DEBUG-DATA>", "debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/weak_random.sol", "filename": "<TESTDATA>/inputs/weak_random.sol",
"lineno": 11, "lineno": 11,
"code": "prize / totalTickets" "code": "prize / totalTickets"
} }
] ]
} }

@ -10,7 +10,7 @@ In the function '_function_0xe9874106' the following predictable state variables
- block.coinbase - block.coinbase
In *<TEST_FILES>/inputs/weak_random.sol:47* In *<TESTDATA>/inputs/weak_random.sol:47*
``` ```
winningAddress.transfer(prize) winningAddress.transfer(prize)
@ -28,7 +28,7 @@ There is a check on storage index 0. This storage slot can be written to by call
There is a check on storage index 1. This storage slot can be written to by calling the function 'fallback'. There is a check on storage index 1. This storage slot can be written to by calling the function 'fallback'.
There is a check on storage index 1. This storage slot can be written to by calling the function 'fallback'. There is a check on storage index 1. This storage slot can be written to by calling the function 'fallback'.
In *<TEST_FILES>/inputs/weak_random.sol:47* In *<TESTDATA>/inputs/weak_random.sol:47*
``` ```
winningAddress.transfer(prize) winningAddress.transfer(prize)
@ -42,7 +42,7 @@ winningAddress.transfer(prize)
### Description ### Description
A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking. A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking.
In *<TEST_FILES>/inputs/weak_random.sol:11* In *<TESTDATA>/inputs/weak_random.sol:11*
``` ```
prize / totalTickets prize / totalTickets
@ -56,7 +56,7 @@ prize / totalTickets
### Description ### Description
A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking. A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking.
In *<TEST_FILES>/inputs/weak_random.sol:11* In *<TESTDATA>/inputs/weak_random.sol:11*
``` ```
prize / totalTickets prize / totalTickets

@ -7,7 +7,7 @@ In the function '_function_0xe9874106' the following predictable state variables
- block.coinbase - block.coinbase
-------------------- --------------------
In file: <TEST_FILES>/inputs/weak_random.sol:47 In file: <TESTDATA>/inputs/weak_random.sol:47
winningAddress.transfer(prize) winningAddress.transfer(prize)
@ -24,7 +24,7 @@ There is a check on storage index 0. This storage slot can be written to by call
There is a check on storage index 1. This storage slot can be written to by calling the function 'fallback'. There is a check on storage index 1. This storage slot can be written to by calling the function 'fallback'.
There is a check on storage index 1. This storage slot can be written to by calling the function 'fallback'. There is a check on storage index 1. This storage slot can be written to by calling the function 'fallback'.
-------------------- --------------------
In file: <TEST_FILES>/inputs/weak_random.sol:47 In file: <TESTDATA>/inputs/weak_random.sol:47
winningAddress.transfer(prize) winningAddress.transfer(prize)
@ -37,7 +37,7 @@ Function name: fallback
PC address: 356 PC address: 356
A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking. A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking.
-------------------- --------------------
In file: <TEST_FILES>/inputs/weak_random.sol:11 In file: <TESTDATA>/inputs/weak_random.sol:11
prize / totalTickets prize / totalTickets
@ -50,7 +50,7 @@ Function name: _function_0xe9874106
PC address: 146 PC address: 146
A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking. A reachable exception (opcode 0xfe) has been detected. This can be caused by type errors, division by zero, out-of-bounds array access, or assert violations. This is acceptable in most situations. Note however that assert() should only be used to check invariants. Use require() for regular input checking.
-------------------- --------------------
In file: <TEST_FILES>/inputs/weak_random.sol:11 In file: <TESTDATA>/inputs/weak_random.sol:11
prize / totalTickets prize / totalTickets

Loading…
Cancel
Save