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. 18
      tests/testdata/outputs/calls.sol.json
  11. 18
      tests/testdata/outputs/calls.sol.markdown
  12. 18
      tests/testdata/outputs/calls.sol.text
  13. 2
      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. 8
      tests/testdata/outputs/exceptions.sol.json
  17. 8
      tests/testdata/outputs/exceptions.sol.markdown
  18. 8
      tests/testdata/outputs/exceptions.sol.text
  19. 4
      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. 2
      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. 2
      tests/testdata/outputs/origin.sol.json
  26. 2
      tests/testdata/outputs/origin.sol.markdown
  27. 2
      tests/testdata/outputs/origin.sol.text
  28. 6
      tests/testdata/outputs/returnvalue.sol.json
  29. 6
      tests/testdata/outputs/returnvalue.sol.markdown
  30. 6
      tests/testdata/outputs/returnvalue.sol.text
  31. 16
      tests/testdata/outputs/rubixi.sol.json
  32. 16
      tests/testdata/outputs/rubixi.sol.markdown
  33. 16
      tests/testdata/outputs/rubixi.sol.text
  34. 2
      tests/testdata/outputs/suicide.sol.json
  35. 2
      tests/testdata/outputs/suicide.sol.markdown
  36. 2
      tests/testdata/outputs/suicide.sol.text
  37. 4
      tests/testdata/outputs/underflow.sol.json
  38. 4
      tests/testdata/outputs/underflow.sol.markdown
  39. 4
      tests/testdata/outputs/underflow.sol.text
  40. 8
      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
### 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.
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.
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
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 subprocess import check_output
from pathlib import Path
from tests import *
MYTH = str(PROJECT_DIR / "myth")
def output_of(command):
return check_output(command, shell=True).decode("UTF-8")
class BaseTestCase(TestCase):
def setUp(self):
self.tests_dir = Path(__file__).parent
self.myth = str(self.tests_dir.parent / "myth")
class CommandLineToolTestCase(BaseTestCase):
class CommandLineToolTestCase(TestCase):
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))
def test_disassemble_solidity_file_correctly(self):
solidity_file = str(self.tests_dir / 'testdata/inputs/metacoin.sol')
command = "python3 {} -d {}".format(self.myth, solidity_file)
solidity_file = str(TESTDATA_INPUTS / 'metacoin.sol')
command = "python3 {} -d {}".format(MYTH, solidity_file)
self.assertIn('0 PUSH1 0x60\n2 PUSH1 0x40', output_of(command))
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))
class TruffleTestCase(BaseTestCase):
class TruffleTestCase(TestCase):
def test_analysis_truffle_project(self):
truffle_project_root = str(self.tests_dir / "truffle_project")
command = "cd {}; truffle compile; python3 {} --truffle".format(truffle_project_root, self.myth)
truffle_project_root = str(TESTS_DIR / "truffle_project")
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))
class InfuraTestCase(BaseTestCase):
class InfuraTestCase(TestCase):
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)
self.assertIn("0 PUSH1 0x60\n2 PUSH1 0x40\n4 MSTORE", output)
self.assertIn("7278 POP\n7279 POP\n7280 JUMP\n7281 STOP", output)
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)
self.assertIn("34 JUMPDEST\n35 CALLVALUE", output)
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)
self.assertIn("9999 PUSH1 0x00\n10001 NOT\n10002 AND\n10003 PUSH1 0x00", output)
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)
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 pathlib import Path
from mythril.analysis.callgraph import generate_graph
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.ether import util
from mythril.ether.soliditycontract import SolidityContract
TEST_FILES = Path(__file__).parent / "testdata"
from tests import *
class GraphTest(TestCase):
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)
sym = SymExecWrapper(contract, address=(util.get_indexed_address(0)))
issues = fire_lasers(sym)
@ -27,7 +25,8 @@ class GraphTest(TestCase):
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)))

@ -10,7 +10,7 @@ class IpcTest(TestCase):
return self.client.eth_newFilter(from_block="0x1", to_block="0x2", address="0x8888f1f195afa192cfee860698584c030f4c9db1")
def setUp(self):
self.client = EthIpc(socket_timeout=1.0)
self.client = EthIpc()
def test_web3_clientVersion(self):
version = self.client.web3_clientVersion()
@ -172,6 +172,7 @@ class IpcTest(TestCase):
count = self.client.eth_getUncleCountByBlockNumber(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):
work = self.client.eth_getWork()
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 pathlib import Path
from mythril.analysis.report import Report
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.soliditycontract import SolidityContract
import json
TEST_FILES = Path(__file__).parent / "testdata"
from tests import *
def _fix_path(text):
return text.replace(str(TEST_FILES), "<TEST_FILES>")
return text.replace(str(TESTDATA), "<TESTDATA>")
def _fix_debug_data(json_str):
read_json = json.loads(json_str)
@ -22,7 +20,7 @@ def _fix_debug_data(json_str):
class AnalysisReportTest(TestCase):
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)
sym = SymExecWrapper(contract, address=(util.get_indexed_address(0)))
issues = fire_lasers(sym)
@ -34,13 +32,14 @@ class AnalysisReportTest(TestCase):
for issue in issues:
report.append_issue(issue)
# (TEST_FILES / "outputs" / (input_file.name + ".text")).write_text(_fix_path(report.as_text()))
# (TEST_FILES / "outputs" / (input_file.name + ".json")).write_text(_fix_path(_fix_debug_data(report.as_json())))
# (TEST_FILES / "outputs" / (input_file.name + ".markdown")).write_text(_fix_path(report.as_markdown()))
# Useful for generating output file
# (TESTDATA_OUTPUTS / (input_file.name + ".text")).write_text(_fix_path(report.as_text()))
# (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()
json_report = (TEST_FILES / "outputs" / (input_file.name + ".json")).read_text()
markdown = (TEST_FILES / "outputs" / (input_file.name + ".markdown")).read_text()
text = (TESTDATA / "outputs" / (input_file.name + ".text")).read_text()
json_report = (TESTDATA / "outputs" / (input_file.name + ".json")).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_markdown()), markdown, "{}: markdown report is changed".format(str(input_file)))

@ -175,6 +175,7 @@ class RpcTest(TestCase):
count = self.client.eth_getUncleCountByBlockNumber(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):
work = self.client.eth_getWork()
self.assertEqual(len(work), 3)

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

@ -8,7 +8,7 @@
### 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.
In *<TEST_FILES>/inputs/calls.sol:16*
In *<TESTDATA>/inputs/calls.sol:16*
```
fixed_address.call()
@ -22,7 +22,7 @@ fixed_address.call()
### 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.
In *<TEST_FILES>/inputs/calls.sol:29*
In *<TESTDATA>/inputs/calls.sol:29*
```
stored_address.call()
@ -36,7 +36,7 @@ stored_address.call()
### 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.
In *<TEST_FILES>/inputs/calls.sol:20*
In *<TESTDATA>/inputs/calls.sol:20*
```
fixed_address.call()
@ -50,7 +50,7 @@ fixed_address.call()
### 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.
In *<TEST_FILES>/inputs/calls.sol:21*
In *<TESTDATA>/inputs/calls.sol:21*
```
statevar = 0
@ -64,7 +64,7 @@ statevar = 0
### 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.
In *<TEST_FILES>/inputs/calls.sol:25*
In *<TESTDATA>/inputs/calls.sol:25*
```
addr.call()
@ -78,7 +78,7 @@ addr.call()
### Description
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()
@ -92,7 +92,7 @@ fixed_address.call()
### Description
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()
@ -106,7 +106,7 @@ stored_address.call()
### Description
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()
@ -120,7 +120,7 @@ fixed_address.call()
### Description
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()

@ -5,7 +5,7 @@ Function name: _function_0x5a6814ec
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.
--------------------
In file: <TEST_FILES>/inputs/calls.sol:16
In file: <TESTDATA>/inputs/calls.sol:16
fixed_address.call()
@ -18,7 +18,7 @@ Function name: _function_0xd24b08cc
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.
--------------------
In file: <TEST_FILES>/inputs/calls.sol:29
In file: <TESTDATA>/inputs/calls.sol:29
stored_address.call()
@ -31,7 +31,7 @@ Function name: _function_0xe11f493e
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.
--------------------
In file: <TEST_FILES>/inputs/calls.sol:20
In file: <TESTDATA>/inputs/calls.sol:20
fixed_address.call()
@ -44,7 +44,7 @@ Function name: _function_0xe11f493e
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.
--------------------
In file: <TEST_FILES>/inputs/calls.sol:21
In file: <TESTDATA>/inputs/calls.sol:21
statevar = 0
@ -57,7 +57,7 @@ Function name: _function_0xe1d10f79
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.
--------------------
In file: <TEST_FILES>/inputs/calls.sol:25
In file: <TESTDATA>/inputs/calls.sol:25
addr.call()
@ -70,7 +70,7 @@ Function name: _function_0x5a6814ec
PC address: 661
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()
@ -83,7 +83,7 @@ Function name: _function_0xd24b08cc
PC address: 779
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()
@ -96,7 +96,7 @@ Function name: _function_0xe11f493e
PC address: 858
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()
@ -109,7 +109,7 @@ Function name: _function_0xe1d10f79
PC address: 912
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()

@ -9,7 +9,7 @@
"type": "Warning",
"address": 816,
"debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/ether_send.sol",
"filename": "<TESTDATA>/inputs/ether_send.sol",
"lineno": 18,
"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()'.
In *<TEST_FILES>/inputs/ether_send.sol:18*
In *<TESTDATA>/inputs/ether_send.sol:18*
```
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()'.
--------------------
In file: <TEST_FILES>/inputs/ether_send.sol:18
In file: <TESTDATA>/inputs/ether_send.sol:18
msg.sender.transfer(this.balance)

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

@ -8,7 +8,7 @@
### 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.
In *<TEST_FILES>/inputs/exceptions.sol:16*
In *<TESTDATA>/inputs/exceptions.sol:16*
```
assert(input != 23)
@ -22,7 +22,7 @@ assert(input != 23)
### 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.
In *<TEST_FILES>/inputs/exceptions.sol:34*
In *<TESTDATA>/inputs/exceptions.sol:34*
```
myarray[index]
@ -36,7 +36,7 @@ myarray[index]
### 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.
In *<TEST_FILES>/inputs/exceptions.sol:24*
In *<TESTDATA>/inputs/exceptions.sol:24*
```
1/input
@ -50,7 +50,7 @@ In *<TEST_FILES>/inputs/exceptions.sol:24*
### 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.
In *<TEST_FILES>/inputs/exceptions.sol:7*
In *<TESTDATA>/inputs/exceptions.sol:7*
```
assert(i == 0)

@ -5,7 +5,7 @@ Function name: _function_0x546455b5
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.
--------------------
In file: <TEST_FILES>/inputs/exceptions.sol:16
In file: <TESTDATA>/inputs/exceptions.sol:16
assert(input != 23)
@ -18,7 +18,7 @@ Function name: _function_0x92dd38ea
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.
--------------------
In file: <TEST_FILES>/inputs/exceptions.sol:34
In file: <TESTDATA>/inputs/exceptions.sol:34
myarray[index]
@ -31,7 +31,7 @@ Function name: _function_0xa08299f1
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.
--------------------
In file: <TEST_FILES>/inputs/exceptions.sol:24
In file: <TESTDATA>/inputs/exceptions.sol:24
1/input
@ -44,7 +44,7 @@ Function name: _function_0xb34c3610
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.
--------------------
In file: <TEST_FILES>/inputs/exceptions.sol:7
In file: <TESTDATA>/inputs/exceptions.sol:7
assert(i == 0)

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

@ -8,7 +8,7 @@
### 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.
In *<TEST_FILES>/inputs/kinds_of_calls.sol:6*
In *<TESTDATA>/inputs/kinds_of_calls.sol:6*
```
_e.call(bytes4(sha3("setN(uint256)")), _n)
@ -22,7 +22,7 @@ _e.call(bytes4(sha3("setN(uint256)")), _n)
### Description
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)

@ -5,7 +5,7 @@ Function name: _function_0xeea4c864
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.
--------------------
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)
@ -18,7 +18,7 @@ Function name: _function_0xeea4c864
PC address: 1038
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)

@ -9,7 +9,7 @@
"type": "Warning",
"address": 142,
"debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/multi_contracts.sol",
"filename": "<TESTDATA>/inputs/multi_contracts.sol",
"lineno": 14,
"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.
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)

@ -6,7 +6,7 @@ PC address: 142
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.
--------------------
In file: <TEST_FILES>/inputs/multi_contracts.sol:14
In file: <TESTDATA>/inputs/multi_contracts.sol:14
msg.sender.transfer(2 ether)

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

@ -9,7 +9,7 @@
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
In *<TEST_FILES>/inputs/origin.sol:18*
In *<TESTDATA>/inputs/origin.sol:18*
```
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.
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

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

@ -8,7 +8,7 @@
### 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.
In *<TEST_FILES>/inputs/returnvalue.sol:10*
In *<TESTDATA>/inputs/returnvalue.sol:10*
```
callee.call()
@ -22,7 +22,7 @@ callee.call()
### 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.
In *<TEST_FILES>/inputs/returnvalue.sol:6*
In *<TESTDATA>/inputs/returnvalue.sol:6*
```
callee.call()
@ -36,7 +36,7 @@ callee.call()
### Description
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()

@ -5,7 +5,7 @@ Function name: _function_0x633ab5e0
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.
--------------------
In file: <TEST_FILES>/inputs/returnvalue.sol:10
In file: <TESTDATA>/inputs/returnvalue.sol:10
callee.call()
@ -18,7 +18,7 @@ Function name: _function_0xe3bea282
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.
--------------------
In file: <TEST_FILES>/inputs/returnvalue.sol:6
In file: <TESTDATA>/inputs/returnvalue.sol:6
callee.call()
@ -31,7 +31,7 @@ Function name: _function_0xe3bea282
PC address: 285
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()

@ -9,7 +9,7 @@
"type": "Warning",
"address": 1599,
"debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/rubixi.sol",
"filename": "<TESTDATA>/inputs/rubixi.sol",
"lineno": 93,
"code": "creator.send(feesToCollect)"
},
@ -20,7 +20,7 @@
"type": "Warning",
"address": 1940,
"debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/rubixi.sol",
"filename": "<TESTDATA>/inputs/rubixi.sol",
"lineno": 75,
"code": "creator.send(collectedFees)"
},
@ -31,7 +31,7 @@
"type": "Informational",
"address": 1653,
"debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/rubixi.sol",
"filename": "<TESTDATA>/inputs/rubixi.sol",
"lineno": 131,
"code": "participants[payoutOrder]"
},
@ -42,7 +42,7 @@
"type": "Informational",
"address": 2085,
"debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/rubixi.sol",
"filename": "<TESTDATA>/inputs/rubixi.sol",
"lineno": 148,
"code": "participants[orderInPyramid]"
},
@ -53,7 +53,7 @@
"type": "Warning",
"address": 2743,
"debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/rubixi.sol",
"filename": "<TESTDATA>/inputs/rubixi.sol",
"lineno": 143,
"code": "participants.length - payoutOrder"
},
@ -64,7 +64,7 @@
"type": "Informational",
"address": 1599,
"debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/rubixi.sol",
"filename": "<TESTDATA>/inputs/rubixi.sol",
"lineno": 93,
"code": "creator.send(feesToCollect)"
},
@ -75,7 +75,7 @@
"type": "Informational",
"address": 1940,
"debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/rubixi.sol",
"filename": "<TESTDATA>/inputs/rubixi.sol",
"lineno": 75,
"code": "creator.send(collectedFees)"
},
@ -86,7 +86,7 @@
"type": "Informational",
"address": 2582,
"debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/rubixi.sol",
"filename": "<TESTDATA>/inputs/rubixi.sol",
"lineno": 85,
"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 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)
@ -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 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)
@ -44,7 +44,7 @@ creator.send(collectedFees)
### 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.
In *<TEST_FILES>/inputs/rubixi.sol:131*
In *<TESTDATA>/inputs/rubixi.sol:131*
```
participants[payoutOrder]
@ -58,7 +58,7 @@ participants[payoutOrder]
### 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.
In *<TEST_FILES>/inputs/rubixi.sol:148*
In *<TESTDATA>/inputs/rubixi.sol:148*
```
participants[orderInPyramid]
@ -73,7 +73,7 @@ participants[orderInPyramid]
A possible integer underflow exists in the function _function_0xd11f13df.
The substraction may result in a value < 0.
In *<TEST_FILES>/inputs/rubixi.sol:143*
In *<TESTDATA>/inputs/rubixi.sol:143*
```
participants.length - payoutOrder
@ -87,7 +87,7 @@ participants.length - payoutOrder
### Description
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)
@ -101,7 +101,7 @@ creator.send(feesToCollect)
### Description
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)
@ -115,7 +115,7 @@ creator.send(collectedFees)
### Description
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)

@ -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 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)
@ -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 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)
@ -39,7 +39,7 @@ Function name: _function_0x57d4021b
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.
--------------------
In file: <TEST_FILES>/inputs/rubixi.sol:131
In file: <TESTDATA>/inputs/rubixi.sol:131
participants[payoutOrder]
@ -52,7 +52,7 @@ Function name: _function_0x9dbc4f9b
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.
--------------------
In file: <TEST_FILES>/inputs/rubixi.sol:148
In file: <TESTDATA>/inputs/rubixi.sol:148
participants[orderInPyramid]
@ -66,7 +66,7 @@ PC address: 2743
A possible integer underflow exists in the function _function_0xd11f13df.
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
@ -79,7 +79,7 @@ Function name: _function_0x4229616d
PC address: 1599
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)
@ -92,7 +92,7 @@ Function name: _function_0xb4022950
PC address: 1940
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)
@ -105,7 +105,7 @@ Function name: _function_0xb4022950
PC address: 2582
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)

@ -9,7 +9,7 @@
"type": "Warning",
"address": 146,
"debug": "<DEBUG-DATA>",
"filename": "<TEST_FILES>/inputs/suicide.sol",
"filename": "<TESTDATA>/inputs/suicide.sol",
"lineno": 4,
"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.
In *<TEST_FILES>/inputs/suicide.sol:4*
In *<TESTDATA>/inputs/suicide.sol:4*
```
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.
--------------------
In file: <TEST_FILES>/inputs/suicide.sol:4
In file: <TESTDATA>/inputs/suicide.sol:4
selfdestruct(addr)

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

@ -9,7 +9,7 @@
A possible integer underflow exists in the function sendeth(address,uint256).
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
@ -24,7 +24,7 @@ balances[msg.sender] -= _value
A possible integer underflow exists in the function sendeth(address,uint256).
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

@ -6,7 +6,7 @@ PC address: 649
A possible integer underflow exists in the function sendeth(address,uint256).
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
@ -20,7 +20,7 @@ PC address: 567
A possible integer underflow exists in the function sendeth(address,uint256).
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

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

@ -10,7 +10,7 @@ In the function '_function_0xe9874106' the following predictable state variables
- block.coinbase
In *<TEST_FILES>/inputs/weak_random.sol:47*
In *<TESTDATA>/inputs/weak_random.sol:47*
```
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'.
In *<TEST_FILES>/inputs/weak_random.sol:47*
In *<TESTDATA>/inputs/weak_random.sol:47*
```
winningAddress.transfer(prize)
@ -42,7 +42,7 @@ winningAddress.transfer(prize)
### 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.
In *<TEST_FILES>/inputs/weak_random.sol:11*
In *<TESTDATA>/inputs/weak_random.sol:11*
```
prize / totalTickets
@ -56,7 +56,7 @@ prize / totalTickets
### 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.
In *<TEST_FILES>/inputs/weak_random.sol:11*
In *<TESTDATA>/inputs/weak_random.sol:11*
```
prize / totalTickets

@ -7,7 +7,7 @@ In the function '_function_0xe9874106' the following predictable state variables
- block.coinbase
--------------------
In file: <TEST_FILES>/inputs/weak_random.sol:47
In file: <TESTDATA>/inputs/weak_random.sol:47
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'.
--------------------
In file: <TEST_FILES>/inputs/weak_random.sol:47
In file: <TESTDATA>/inputs/weak_random.sol:47
winningAddress.transfer(prize)
@ -37,7 +37,7 @@ Function name: fallback
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.
--------------------
In file: <TEST_FILES>/inputs/weak_random.sol:11
In file: <TESTDATA>/inputs/weak_random.sol:11
prize / totalTickets
@ -50,7 +50,7 @@ Function name: _function_0xe9874106
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.
--------------------
In file: <TEST_FILES>/inputs/weak_random.sol:11
In file: <TESTDATA>/inputs/weak_random.sol:11
prize / totalTickets

Loading…
Cancel
Save