Merge pull request #290 from crytic/dev-fix-config

Fix config file
pull/298/head
Feist Josselin 5 years ago committed by GitHub
commit d7343aad8f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 54
      slither/__main__.py
  2. 41
      slither/utils/command_line.py

@ -22,7 +22,8 @@ from slither.slither import Slither
from slither.utils.colors import red, yellow, set_colorization_enabled from slither.utils.colors import red, yellow, set_colorization_enabled
from slither.utils.command_line import (output_detectors, output_results_to_markdown, from slither.utils.command_line import (output_detectors, output_results_to_markdown,
output_detectors_json, output_printers, output_detectors_json, output_printers,
output_to_markdown, output_wiki) output_to_markdown, output_wiki, defaults_flag_in_config,
read_config_file)
from crytic_compile import is_supported from crytic_compile import is_supported
from slither.exceptions import SlitherException from slither.exceptions import SlitherException
@ -45,7 +46,6 @@ def process(filename, args, detector_classes, printer_classes):
ast = '--ast-compact-json' ast = '--ast-compact-json'
if args.legacy_ast: if args.legacy_ast:
ast = '--ast-json' ast = '--ast-json'
args.filter_paths = parse_filter_paths(args)
slither = Slither(filename, slither = Slither(filename,
ast_format=ast, ast_format=ast,
**vars(args)) **vars(args))
@ -84,12 +84,7 @@ def process_files(filenames, args, detector_classes, printer_classes):
all_contracts.append(contract_loaded['ast']) all_contracts.append(contract_loaded['ast'])
slither = Slither(all_contracts, slither = Slither(all_contracts,
solc=args.solc, **vars(args))
disable_solc_warnings=args.disable_solc_warnings,
solc_arguments=args.solc_args,
filter_paths=parse_filter_paths(args),
triage_mode=args.triage_mode,
exclude_dependencies=args.exclude_dependencies)
return _process(slither, detector_classes, printer_classes) return _process(slither, detector_classes, printer_classes)
@ -258,33 +253,6 @@ def parse_filter_paths(args):
return args.filter_paths.split(',') return args.filter_paths.split(',')
return [] return []
# Those are the flags shared by the command line and the config file
defaults_flag_in_config = {
'detectors_to_run': 'all',
'printers_to_run': None,
'detectors_to_exclude': None,
'exclude_dependencies': False,
'exclude_optimization': False,
'exclude_informational': False,
'exclude_low': False,
'exclude_medium': False,
'exclude_high': False,
'solc': 'solc',
'solc_args': None,
'disable_solc_warnings': False,
'json': None,
'truffle_version': None,
'disable_color': False,
'filter_paths': None,
'truffle_ignore_compile': False,
'truffle_build_directory': 'build/contracts',
'embark_ignore_compile': False,
'embark_overwrite_config': False,
# debug command
'legacy_ast': False,
'ignore_return_value': False
}
def parse_args(detector_classes, printer_classes): def parse_args(detector_classes, printer_classes):
parser = argparse.ArgumentParser(description='Slither. For usage information, see https://github.com/crytic/slither/wiki/Usage', parser = argparse.ArgumentParser(description='Slither. For usage information, see https://github.com/crytic/slither/wiki/Usage',
usage="slither.py contract.sol [flag]") usage="slither.py contract.sol [flag]")
@ -451,19 +419,9 @@ def parse_args(detector_classes, printer_classes):
sys.exit(1) sys.exit(1)
args = parser.parse_args() args = parser.parse_args()
read_config_file(args)
if os.path.isfile(args.config_file): args.filter_paths = parse_filter_paths(args)
try:
with open(args.config_file) as f:
config = json.load(f)
for key, elem in config.items():
if key not in defaults_flag_in_config:
logger.info(yellow('{} has an unknown key: {} : {}'.format(args.config_file, key, elem)))
continue
if getattr(args, key) == defaults_flag_in_config[key]:
setattr(args, key, elem)
except json.decoder.JSONDecodeError as e:
logger.error(red('Impossible to read {}, please check the file {}'.format(args.config_file, e)))
return args return args
@ -536,6 +494,8 @@ def main_impl(all_detector_classes, all_printer_classes):
:param all_detector_classes: A list of all detectors that can be included/excluded. :param all_detector_classes: A list of all detectors that can be included/excluded.
:param all_printer_classes: A list of all printers that can be included. :param all_printer_classes: A list of all printers that can be included.
""" """
# Set logger of Slither to info, to catch warnings related to the arg parsing
logger.setLevel(logging.INFO)
args = parse_args(all_detector_classes, all_printer_classes) args = parse_args(all_detector_classes, all_printer_classes)
# Set colorization option # Set colorization option

@ -1,8 +1,49 @@
import os
import logging
import json import json
from collections import defaultdict from collections import defaultdict
from prettytable import PrettyTable from prettytable import PrettyTable
from crytic_compile.cryticparser.defaults import defaults_flag_in_config as defaults_flag_in_config_crytic_compile
from slither.detectors.abstract_detector import classification_txt from slither.detectors.abstract_detector import classification_txt
from .colors import yellow, red
logger = logging.getLogger("Slither")
# Those are the flags shared by the command line and the config file
defaults_flag_in_config = {
'detectors_to_run': 'all',
'printers_to_run': None,
'detectors_to_exclude': None,
'exclude_dependencies': False,
'exclude_informational': False,
'exclude_optimization': False,
'exclude_low': False,
'exclude_medium': False,
'exclude_high': False,
'json': None,
'disable_color': False,
'filter_paths': None,
# debug command
'legacy_ast': False,
'ignore_return_value': False,
**defaults_flag_in_config_crytic_compile
}
def read_config_file(args):
if os.path.isfile(args.config_file):
try:
with open(args.config_file) as f:
config = json.load(f)
for key, elem in config.items():
if key not in defaults_flag_in_config:
logger.info(yellow('{} has an unknown key: {} : {}'.format(args.config_file, key, elem)))
continue
if getattr(args, key) == defaults_flag_in_config[key]:
setattr(args, key, elem)
except json.decoder.JSONDecodeError as e:
logger.error(red('Impossible to read {}, please check the file {}'.format(args.config_file, e)))
def output_to_markdown(detector_classes, printer_classes, filter_wiki): def output_to_markdown(detector_classes, printer_classes, filter_wiki):

Loading…
Cancel
Save