securify2
securify2 copied to clipboard
Can not analyze smart contract due to Souffle
I have configured successfully for all the prerequisite, when I entered
python securify
I can get:
usage: securify contract.sol [opts]
securify: error: the following arguments are required: contract
But when I tried to analyze a simple smart contract with reentrancy vulnerability, I got the error:
Environment variable LD_LIBRARY_PATH not set. Setting it up...
pragma directive defines a prior version to 0.6.7. Changing pragma version to 0.6.7....
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "securify/__main__.py", line 286, in <module>
main()
File "securify/__main__.py", line 272, in main
severity_exc=args.exclude_severity)
File "securify/__main__.py", line 15, in get_list_of_patterns
pattern_classes = discover_patterns()
File "/Users/ningyu/securify2/venv/lib/python3.7/site-packages/securify-0.0.1-py3.7.egg/securify/analyses/analysis.py", line 123, in discover_patterns
patterns.update(c.get())
File "/Users/ningyu/securify2/venv/lib/python3.7/site-packages/securify-0.0.1-py3.7.egg/securify/analyses/patterns/static/static_analysis_patterns.py", line 16, in get
patterns = cls.__list_static_patterns()
File "/Users/ningyu/securify2/venv/lib/python3.7/site-packages/securify-0.0.1-py3.7.egg/securify/analyses/patterns/static/static_analysis_patterns.py", line 23, in __list_static_patterns
patterns = static_analysis.discover_patterns()
File "/Users/ningyu/securify2/venv/lib/python3.7/site-packages/securify-0.0.1-py3.7.egg/securify/staticanalysis/static_analysis.py", line 69, in discover_patterns
souffle_kwargs=kw_args_souffle)
File "/Users/ningyu/securify2/venv/lib/python3.7/site-packages/securify-0.0.1-py3.7.egg/securify/staticanalysis/souffle/souffle.py", line 62, in run_souffle
**(souffle_kwargs or {}))
File "/Users/ningyu/securify2/venv/lib/python3.7/site-packages/securify-0.0.1-py3.7.egg/securify/staticanalysis/souffle/wrapper.py", line 119, in souffle_wrapper
stderr_data=codecs.decode(stderrdata),
securify.staticanalysis.souffle.exceptions.SouffleError: Error during souffle execution:
cannot open file /Users/ningyu/securify2/venv/lib/python3.7/site-packages/securify-0.0.1-py3.7.egg/securify/staticanalysis/souffle_analysis/analysis.dl
I have tried souffle from 1.6.2 to 1.7.2, none of them can settle this thing down. Could you please help me with this problem, thank you!
Unfortunately, I haven't been able to reproduce your error. It seems like securify is looking for the datalog file in the wrong place. Could you provide more information on the installation process you followed?
What message do you get when you execute the following commands in the securify2 directory?
pip install -r requirements.txt
pip install -e .
securify <solidity-source>.sol
I followed your instructions. The first and second lines execute successfully. However, when I try to run the third line, I got this error:
Environment variable LD_LIBRARY_PATH not set. Setting it up...
pragma directive defines a prior version to 0.6.7. Changing pragma version to 0.6.7....
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "securify/__main__.py", line 286, in <module>
main()
File "securify/__main__.py", line 272, in main
severity_exc=args.exclude_severity)
File "securify/__main__.py", line 15, in get_list_of_patterns
pattern_classes = discover_patterns()
File "/Users/ningyu/securify2/securify2-github/securify/analyses/analysis.py", line 123, in discover_patterns
patterns.update(c.get())
File "/Users/ningyu/securify2/securify2-github/securify/analyses/patterns/static/static_analysis_patterns.py", line 16, in get
patterns = cls.__list_static_patterns()
File "/Users/ningyu/securify2/securify2-github/securify/analyses/patterns/static/static_analysis_patterns.py", line 23, in __list_static_patterns
patterns = static_analysis.discover_patterns()
File "/Users/ningyu/securify2/securify2-github/securify/staticanalysis/static_analysis.py", line 69, in discover_patterns
souffle_kwargs=kw_args_souffle)
File "/Users/ningyu/securify2/securify2-github/securify/staticanalysis/souffle/souffle.py", line 62, in run_souffle
**(souffle_kwargs or {}))
File "/Users/ningyu/securify2/securify2-github/securify/staticanalysis/souffle/wrapper.py", line 119, in souffle_wrapper
stderr_data=codecs.decode(stderrdata),
securify.staticanalysis.souffle.exceptions.SouffleError: Error during souffle execution:
This installation of Souffle does not support concurrent jobs.
libc++abi.dylib: terminating with uncaught exception of type std::invalid_argument: stoi: no conversion
It seems like I have another problem with Souffle. Moreover, when I type souffle
in command line, I got this version information:
----------------------------------------------------------------------------
Version: 1.7.0
----------------------------------------------------------------------------
Copyright (c) 2016-18 The Souffle Developers.
Copyright (c) 2013-16 Oracle and/or its affiliates.
All rights reserved.
It seems like the problem is related to the souffle binary. Have you tried souffle 1.6.2 instead after following my instructions?
I have reinstalled the souffle 1.6.2, I still got an error:
Environment variable LD_LIBRARY_PATH not set. Setting it up...
pragma directive defines a prior version to 0.6.7. Changing pragma version to 0.6.7....
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 193, in _run_module_as_main
"__main__", mod_spec)
File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/runpy.py", line 85, in _run_code
exec(code, run_globals)
File "securify/__main__.py", line 286, in <module>
main()
File "securify/__main__.py", line 272, in main
severity_exc=args.exclude_severity)
File "securify/__main__.py", line 15, in get_list_of_patterns
pattern_classes = discover_patterns()
File "/Users/ningyu/securify2/securify2-github/securify/analyses/analysis.py", line 123, in discover_patterns
patterns.update(c.get())
File "/Users/ningyu/securify2/securify2-github/securify/analyses/patterns/static/static_analysis_patterns.py", line 16, in get
patterns = cls.__list_static_patterns()
File "/Users/ningyu/securify2/securify2-github/securify/analyses/patterns/static/static_analysis_patterns.py", line 23, in __list_static_patterns
patterns = static_analysis.discover_patterns()
File "/Users/ningyu/securify2/securify2-github/securify/staticanalysis/static_analysis.py", line 69, in discover_patterns
souffle_kwargs=kw_args_souffle)
File "/Users/ningyu/securify2/securify2-github/securify/staticanalysis/souffle/souffle.py", line 62, in run_souffle
**(souffle_kwargs or {}))
File "/Users/ningyu/securify2/securify2-github/securify/staticanalysis/souffle/wrapper.py", line 119, in souffle_wrapper
stderr_data=codecs.decode(stderrdata),
securify.staticanalysis.souffle.exceptions.SouffleError: Error during souffle execution:
Warning: OpenMP is not enabled
libc++abi.dylib: terminating with uncaught exception of type std::invalid_argument: stoi: no conversion
I dont know if it is related to MacOS, maybe I should compile it on linux? Could you please tell me what is your testing operating system and its version? Maybe I should install a virtual machine
It is probably related to MacOS as you mentioned. I would recommend you to try to compile it in a virtual machine with ubuntu 18.04 or use Docker instead.