Exemplo n.º 1
0
def main() -> int:
    # When running semgrep as a command line tool
    # silence root level logger otherwise logs higher
    # than warning are handled twice
    logger = getLogger("semgrep")
    logger.propagate = False
    metric_manager.set_version(__VERSION__)
    try:
        cli()
    # Catch custom exceptions, output the right message and exit.
    # Note: this doesn't catch all Exceptions and lets them bubble up.
    except SemgrepError as e:
        metric_manager.set_return_code(e.code)
        return e.code
    else:
        metric_manager.set_return_code(OK_EXIT_CODE)
        return OK_EXIT_CODE
    finally:
        metric_manager.send()
Exemplo n.º 2
0
from semgrep.error import Level
from semgrep.error import MISSING_CONFIG_EXIT_CODE
from semgrep.error import SemgrepError
from semgrep.metric_manager import metric_manager
from semgrep.output import OutputHandler
from semgrep.output import OutputSettings
from semgrep.profile_manager import ProfileManager
from semgrep.rule import Rule
from semgrep.rule_match import RuleMatch
from semgrep.semgrep_types import TAINT_MODE
from semgrep.target_manager import TargetManager
from semgrep.util import manually_search_file
from semgrep.util import sub_check_output
from semgrep.verbose_logging import getLogger

logger = getLogger(__name__)


def notify_user_of_work(
    filtered_rules: List[Rule],
    include: List[str],
    exclude: List[str],
) -> None:
    """
    Notify user of what semgrep is about to do, including:
    - number of rules
    - which rules? <- not yet, too cluttered
    - which dirs are excluded, etc.
    """
    if include:
        logger.info(f"including files:")
Exemplo n.º 3
0
from peewee import ModelSelect
from ruamel.yaml import YAML

import semgrep.semgrep_main
from semgrep.config_resolver import Config
from semgrep.config_resolver import resolve_config
from semgrep.error import ERROR_MAP
from semgrep.error import FATAL_EXIT_CODE
from semgrep.error import Level
from semgrep.error import SemgrepError
from semgrep.pattern_match import PatternMatch
from semgrep.rule import Rule
from semgrep.rule_match import RuleMatch
from semgrep.verbose_logging import getLogger

logger = getLogger(__file__)

yaml = YAML()

# TODO: refactor into nice code files instead of this giant file
# TODO: probably, add error handling
# TODO: decide how to represent these kinds of rules in the output.
# TODO(bug): join rules don't propagate metavariables forward into messages
# # report the last finding? report multiple findings?


class InvalidConditionError(SemgrepError):
    level = Level.ERROR
    code = FATAL_EXIT_CODE