Lightweight static analysis for many languages. Find bug variants with patterns that look like source code.
This report presents the forensic synthetic code analysis of semgrep/semgrep, a OCaml project with 15,872 GitHub stars. SynthScan v2.0 examined 519,111 lines of code across 5026 source files, recording 2020 pattern matches distributed across 25 syntactic categories. The overall adjusted score of 5.0 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 2020 distinct pattern matches across 25 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/patterns/python/cp_exception.py | 1 | def throw_must_not_go_through_else(): | CODE |
| LOW⚡ | tests/patterns/python/cp_exception.py | 15 | def no_throw_goes_through_else(): | CODE |
| LOW⚡ | tests/patterns/python/cp_exception.py | 27 | def may_throw_goes_through_catch_and_else(): | CODE |
| LOW⚡ | tests/patterns/python/cp_exception.py | 41 | def exception_or_not_goes_through_finally(): | CODE |
| LOW⚡ | tests/patterns/python/cp_exception.py | 55 | def non_nested_try_statements_are_independent(): | CODE |
| LOW | tests/rules/constprop_bitwise.py | 45 | def test_bitwise_and_no_match(): | CODE |
| LOW | tests/rules/constprop_bitwise.py | 80 | def test_arith_right_shift_negative(): | CODE |
| LOW | tests/rules/constprop_bitwise.py | 94 | def test_non_constant_operand(): | CODE |
| LOW | tests/rules/constprop_bitwise.py | 110 | def test_bitnot_double_is_identity(): | CODE |
| LOW | tests/rules/constprop_bitwise.py | 117 | def test_bitnot_positive_is_negative(): | CODE |
| LOW | tests/rules/constprop_bitwise.py | 135 | def test_floordiv_both_negative(): | CODE |
| LOW | tests/rules/constprop_bitwise.py | 152 | def test_floordiv_non_constant(n): | CODE |
| LOW | tests/rules/constprop_bitwise.py | 161 | def test_floordiv_neg_dividend_drives_sccp(): | CODE |
| LOW | tests/rules/constprop_bitwise.py | 172 | def test_floordiv_neg_divisor_drives_sccp(): | CODE |
| LOW | tests/rules/constprop_sccp_integration.py | 45 | def test_multi_hop_arithmetic(): | CODE |
| LOW | tests/rules/constprop_sccp_integration.py | 95 | def test_loop_invariant_then_sccp(): | CODE |
| LOW | tests/rules/constprop_sccp_integration.py | 128 | def test_floordiv_neg_drives_sccp(): | CODE |
| LOW | tests/rules/constprop_sccp_integration.py | 170 | def test_not_equal_drives_sccp(): | CODE |
| LOW | tests/rules/constprop_sccp_integration.py | 181 | def test_comparison_lte_drives_sccp(): | CODE |
| LOW | tests/rules/constprop_sccp_integration.py | 193 | def test_floordiv_unknown_does_not_drive_sccp(n): | CODE |
| LOW | tests/rules/constprop_sccp_integration.py | 203 | def test_mod_unknown_does_not_drive_sccp(n): | CODE |
| LOW | tests/rules/taint_exception.py | 93 | def throw_must_not_go_through_else(input): | CODE |
| LOW | tests/rules/taint_exception.py | 110 | def no_throw_goes_through_else(input): | CODE |
| LOW | tests/rules/taint_exception.py | 126 | def may_throw_goes_through_catch_and_else(input): | CODE |
| LOW | tests/rules/taint_exception.py | 143 | def exception_or_not_goes_through_finally(input): | CODE |
| LOW | tests/rules/taint_exception.py | 161 | def throw_may_go_through_catch_and_propagates(input): | CODE |
| LOW | tests/rules/constprop_sccp.py | 51 | def test_arithmetic_condition(): | CODE |
| LOW | tests/rules/constprop_sccp.py | 88 | def test_only_defined_in_live_branch(): | CODE |
| LOW | tests/rules/constprop_sccp.py | 102 | def test_dead_branch_propagation(): | CODE |
| LOW | tests/rules/constprop_sccp.py | 173 | def test_greater_than_or_equal_condition(): | CODE |
| LOW | tests/rules/constprop_sccp.py | 184 | def test_less_than_or_equal_false(): | CODE |
| LOW | tests/rules/constprop_sccp.py | 198 | def test_elif_dead_first_branch(): | CODE |
| LOW | tests/rules/constprop_sccp.py | 214 | def test_loop_invariant_drives_sccp(): | CODE |
| LOW | …/parsing/python/async_generators_and_comprehensions.py | 31 | async def await_inside_comprehension(): | CODE |
| LOW | tests/perf/timeout.js | 1075 | function isStartEmulateButtonPresent() { | CODE |
| LOW | tests/perf/timeout.js | 1136 | function checkCartIdFieldAndToggleBind(cartIdField) { | CODE |
| LOW | tests/perf/timeout.js | 1238 | function revertAutocompleteNormalize() { | CODE |
| LOW | tests/perf/timeout.js | 1262 | function addCustomerListBtnHandler() { | CODE |
| LOW | tests/perf/timeout.js | 1343 | function asmAifSectionClickHandler() { | CODE |
| LOW | tests/perf/timeout.js | 1385 | function getCurrentEmulatedCustomerId() { | CODE |
| LOW | tests/perf/timeout.js | 1483 | function populateCustomerListModal(targetUrl, componentToUpdate, callFunction) { | CODE |
| LOW | tests/perf/timeout.js | 1520 | function addRatesTableSorterParser() { | CODE |
| LOW | tests/perf/timeout.js | 1793 | function getNodeFromRowAndCellIndex(rows, rowIndex, cellIndex) { | CODE |
| LOW | tests/perf/timeout.js | 1926 | function computeTableHeaderCellIndexes(t) { | CODE |
| LOW | tests/perf/timeout.js | 1995 | function checkHeaderOptionsSortingLocked(table, i) { | CODE |
| LOW | tests/perf/three.js | 21805 | function materialNeedsSmoothNormals ( material ) { | CODE |
| LOW | tests/perf/three.js | 21833 | function bufferGuessVertexColorType( material ) { | CODE |
| LOW | tests/perf/three.js | 24365 | function unrollImmediateBufferMaterial ( globject ) { | CODE |
| LOW | cli/tests/conftest.py | 103 | def pytest_collection_modifyitems( | CODE |
| LOW | cli/tests/conftest.py | 638 | def _mk_osemgrep_project_root(): | CODE |
| LOW | cli/tests/conftest.py | 685 | def run_semgrep_on_copied_files( | CODE |
| LOW | cli/tests/conftest.py | 704 | def run_semgrep_in_test_folder( | CODE |
| LOW | cli/tests/conftest.py | 757 | def lockfile_path_in_tmp_for_perf(monkeypatch: pytest.MonkeyPatch, tmp_path: Path): | CODE |
| LOW | cli/tests/default/unit/test_version.py | 19 | def test_version_check_caching(tmp_path, mocker, monkeypatch): | CODE |
| LOW | …i/tests/default/unit/test_resolve_dependency_source.py | 26 | def test_handle_missing_parser_for_lockfile(mock_parsers_dict) -> None: | CODE |
| LOW | …i/tests/default/unit/test_resolve_dependency_source.py | 60 | def test_dependency_parser_exception(mock_parsers_dict) -> None: | CODE |
| LOW | cli/tests/default/unit/test_dependency_path_wiring.py | 76 | def test_subproject_deps_feed_the_parent_index(): | CODE |
| LOW | cli/tests/default/unit/test_run_scan.py | 45 | def test_raises_invalid_rule_schema_under_none(): | CODE |
| LOW | cli/tests/default/unit/test_run_scan.py | 56 | def test_no_raise_under_full_even_with_rule_parse_error(): | CODE |
| LOW | cli/tests/default/unit/test_run_scan.py | 63 | def test_no_raise_under_none_when_no_rule_parse_errors(): | CODE |
| 695 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .pre-commit-config.yaml | 1 | # coupling: if you add a check in this file, please add it first in | COMMENT |
| LOW | .pre-commit-config.yaml | 161 | hooks: | COMMENT |
| LOW | .pre-commit-config.yaml | 241 | # TODO: remove once file targeting is revamped and supports | COMMENT |
| LOW | .pre-commit-config.yaml | 261 | # batches and run one semgrep per batch. This is why it's | COMMENT |
| LOW | .pre-commit-hooks.yaml | 1 | # See https://pre-commit.com/#new-hooks for more information on this file. | COMMENT |
| LOW | semgrep.yml | 1 | # This file contains Semgrep rules. See https://semgrep.dev for more info. | COMMENT |
| LOW | mypy-tests.ini | 1 | # TODO: explain why we have a different mypy setup for test code. | COMMENT |
| LOW | setup.py | 1 | # | COMMENT |
| LOW | tests/patterns/go/partial_single_field2.go | 1 | package main | COMMENT |
| LOW | tests/patterns/go/misc_ref_new.go | 21 | //body, err := io.ReadAll(res.Body) | COMMENT |
| LOW | …sts/patterns/python/const_fold_edge_floor_div_large.py | 1 | # Floor division with dividends >= 2^62 must fold to the correct result. | COMMENT |
| LOW | tests/patterns/python/python2.py | 1 | #ERROR: match | COMMENT |
| LOW | tests/patterns/python/import_metavar_fullpath.py | 1 | # what actually matters in this test is the value bound to $X | COMMENT |
| LOW | tests/patterns/python/cp_label.py | 1 | # This is not actually valid Python. Python does not allow comments after line | COMMENT |
| LOW | tests/patterns/python/misc_fake_propa.py | 1 | # This used to generate a FakeTokStr exn when we introduced the | COMMENT |
| LOW | tests/patterns/js/infer_const_regexp.js | 1 | // Constant propagation should work with regexp literals just like string | COMMENT |
| LOW | tests/patterns/rust/attribute_matching.rs | 41 | // MATCH: | COMMENT |
| LOW | tests/patterns/rust/misc_naming_recursion.rs | 1 | // this was causing -dump_named_ast to recurse indefinitely | COMMENT |
| LOW | tests/patterns/java/metavar_typed_bool.java | 41 | COMMENT | |
| LOW | tests/patterns/json/metavar_array.json | 1 | // Note that this file is not really a valid JSON file because | COMMENT |
| LOW | …erns/cpp/parsing_todo_tree_sitter/non_recoverable1.cpp | 21 | #include "tensorflow/core/framework/tensor_util.h" | COMMENT |
| LOW | …erns/cpp/parsing_todo_tree_sitter/non_recoverable1.cpp | 261 | unit_dimension++; | COMMENT |
| LOW | …erns/cpp/parsing_todo_tree_sitter/non_recoverable1.cpp | 281 | // | COMMENT |
| LOW | tests/patterns/csharp/todo/misc_linq.cs | 1 | // this used to not match because of bad interaction with -fast | COMMENT |
| LOW | tests/patterns/ruby/metavar_interpolated.rb | 1 | # https://github.com/returntocorp/semgrep/issues/3560 | COMMENT |
| LOW | tests/autofix/python/metavar_string2.py | 1 | # Forked from metavar_string.py to comment out the f string below but test | COMMENT |
| LOW | tests/autofix/ts/fix_cast.ts | 1 | // Regression test for https://github.com/returntocorp/semgrep/issues/6233. The | COMMENT |
| LOW | tests/rules_v2/const_fold_overflow.py | 1 | # Regression tests for 64-bit integer overflow detection in constant folding. | COMMENT |
| LOW | tests/rules_error_recovery/lines_of_file_outofbound.tf | 1 | # On this target file, we get some parse errors on the "bar" field | COMMENT |
| LOW | tests/rules/typed_metavar_metavar_regex.go | 1 | func f(c *http.Request) { | COMMENT |
| LOW | tests/rules/kotlin_slow_import.kt | 21 | // "acceptCharset: ${req.acceptCharset()} \n" + | COMMENT |
| LOW | tests/rules/kotlin_slow_import.kt | 41 | // "local.uri: ${local.uri} \n" + | COMMENT |
| LOW | tests/rules/constprop_bitwise.py | 1 | # Tests for bitwise, shift, unary, floor-division, modulo, and power operator | COMMENT |
| LOW | tests/rules/pattern_regex_inside.py | 1 | # from https://github.com/returntocorp/semgrep/issues/912 | COMMENT |
| LOW | tests/rules/macro_arg_taint.rs | 1 | // if this does not properly translate the macro args, | COMMENT |
| LOW | tests/rules/sym_prop_no_merge1.go | 1 | func test() { | COMMENT |
| LOW | tests/rules/constprop_sccp.py | 1 | # Tests for SCCP (Sparse Conditional Constant Propagation). | COMMENT |
| LOW | tests/rules/taint_labels_rec.rs | 1 | async fn test(client: Client, id: String) -> Option<Json<Post>> { | COMMENT |
| LOW | tests/rules/relevant_rule_badutf8.js | 1 | // Char below somehow causes PCRE engine to throw a BadUTF8 error. | COMMENT |
| LOW | tests/rules/date_comparison.py | 1 | #ok: date_rule | COMMENT |
| LOW | tests/parsing/js/cp_assign_record_assign.js | 1 | // This used to raise `Impossible` during constant propagation because | COMMENT |
| LOW | tests/parsing/dart/dart3_grammar_features.dart | 1 | // Smoke test for grammar features added by the tree-sitter-dart bump: | COMMENT |
| LOW | tests/parsing/java/textblocks.java | 1 | //@Controller | COMMENT |
| LOW | tests/parsing/java/textblocks.java | 21 | COMMENT | |
| LOW | tests/parsing/swift/expressions.swift | 41 | // correctly parsed, even though that issue has been mitigated. | COMMENT |
| LOW | tests/parsing/swift/expressions.swift | 241 | ({ x in x }); | COMMENT |
| LOW | tests/perf/three.js | 30161 | points.push( points[ 0 ] ); | COMMENT |
| LOW | tests/perf/three.js | 30501 | // | COMMENT |
| LOW | tests/perf/three.js | 31321 | // var c = []; | COMMENT |
| LOW | cli/pyproject.toml | 41 | # These specifiers are flexible so semgrep can coexist with other tools. | COMMENT |
| LOW | cli/setup.py | 1 | # | COMMENT |
| LOW | cli/setup.py | 81 | COMMENT | |
| LOW | cli/tests/conftest.py | 1 | # | COMMENT |
| LOW | cli/tests/conftest.py | 21 | # | COMMENT |
| LOW | cli/tests/conftest.py | 601 | # Fixtures | COMMENT |
| LOW | cli/tests/semgrep_runner.py | 1 | # | COMMENT |
| LOW | cli/tests/semgrep_runner.py | 61 | / "semgrep" | COMMENT |
| LOW | cli/tests/fixtures.py | 1 | # | COMMENT |
| LOW | cli/tests/default/unit/test_version.py | 1 | # | COMMENT |
| LOW | …i/tests/default/unit/test_resolve_dependency_source.py | 1 | # | COMMENT |
| 460 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .pre-commit-config.yaml | 19 | # ---------------------------------------------------------- | COMMENT |
| MEDIUM | .pre-commit-config.yaml | 21 | # ---------------------------------------------------------- | COMMENT |
| MEDIUM | .pre-commit-config.yaml | 60 | # ---------------------------------------------------------- | COMMENT |
| MEDIUM | .pre-commit-config.yaml | 62 | # ---------------------------------------------------------- | COMMENT |
| MEDIUM | .pre-commit-config.yaml | 163 | # ---------------------------------------------------------- | COMMENT |
| MEDIUM | .pre-commit-config.yaml | 165 | # ---------------------------------------------------------- | COMMENT |
| MEDIUM | .pre-commit-config.yaml | 182 | # ---------------------------------------------------------- | COMMENT |
| MEDIUM | .pre-commit-config.yaml | 184 | # ---------------------------------------------------------- | COMMENT |
| MEDIUM | .pre-commit-config.yaml | 201 | # ---------------------------------------------------------- | COMMENT |
| MEDIUM | .pre-commit-config.yaml | 203 | # ---------------------------------------------------------- | COMMENT |
| MEDIUM | .pre-commit-config.yaml | 225 | # ---------------------------------------------------------- | COMMENT |
| MEDIUM | .pre-commit-config.yaml | 227 | # ---------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | cli/tests/default/unit/test_scans_v2.py | 312 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | cli/tests/default/unit/test_scans_v2.py | 314 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cli/tests/default/unit/test_scans_v2.py | 384 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cli/tests/default/unit/test_scans_v2.py | 386 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | cli/tests/default/unit/test_scans_v2.py | 406 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | cli/tests/default/unit/test_scans_v2.py | 408 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cli/tests/default/mcp/test_supply_chain_hook.py | 21 | # --------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cli/tests/default/mcp/test_supply_chain_hook.py | 23 | # --------------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | cli/tests/default/mcp/test_supply_chain_hook.py | 159 | # --------------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | cli/tests/default/mcp/test_supply_chain_hook.py | 161 | # --------------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | cli/tests/default/mcp/test_supply_chain_hook.py | 213 | # --------------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | cli/tests/default/mcp/test_supply_chain_hook.py | 215 | # --------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/git.py | 487 | # ============================== | STRING |
| MEDIUM | cli/src/semgrep/git.py | 489 | # ============================== | STRING |
| MEDIUM | cli/src/semgrep/git.py | 512 | # ================================== | STRING |
| MEDIUM | cli/src/semgrep/git.py | 514 | # ================================== | STRING |
| MEDIUM | cli/src/semgrep/run_scan.py | 1070 | # --------------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1072 | # --------------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1106 | # --------------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1108 | # --------------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1131 | # --------------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1133 | # --------------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1154 | # --------------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1156 | # --------------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1352 | # ---------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1354 | # ---------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1415 | # ---------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1417 | # ---------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1454 | # ---------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1456 | # ---------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1542 | # ---------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1544 | # ---------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1613 | # --------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1615 | # --------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1652 | # --------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1654 | # --------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1678 | # --------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/run_scan.py | 1680 | # --------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/mcp/server.py | 69 | # --------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/mcp/server.py | 71 | # --------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/mcp/server.py | 160 | # --------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/mcp/server.py | 162 | # --------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/mcp/server.py | 489 | # --------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/mcp/server.py | 491 | # --------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/mcp/server.py | 509 | # --------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/mcp/server.py | 511 | # --------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/mcp/server.py | 1309 | # --------------------------------------------------------------------------------- | COMMENT |
| MEDIUM | cli/src/semgrep/mcp/server.py | 1311 | # --------------------------------------------------------------------------------- | COMMENT |
| 32 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | tests/precommit_dogfooding/python.yml | 6561 | - pattern: cryptography.hazmat.primitives.asymmetric.dsa.generate_private_key(..., | CODE |
| CRITICAL | tests/precommit_dogfooding/python.yml | 6563 | - pattern: cryptography.hazmat.primitives.asymmetric.dsa.generate_private_key($SIZE, | CODE |
| CRITICAL | tests/precommit_dogfooding/python.yml | 7675 | - pattern-inside: cryptography.hazmat.primitives.asymmetric.ec.generate_private_key(...) | CODE |
| CRITICAL | tests/precommit_dogfooding/python.yml | 8333 | pattern: cryptography.hazmat.primitives.ciphers.algorithms.ARC4(...) | CODE |
| CRITICAL | tests/precommit_dogfooding/python.yml | 8539 | pattern: cryptography.hazmat.primitives.ciphers.algorithms.Blowfish(...) | CODE |
| CRITICAL | tests/precommit_dogfooding/python.yml | 8807 | - pattern: cryptography.hazmat.primitives.asymmetric.rsa.generate_private_key(..., | CODE |
| CRITICAL | tests/precommit_dogfooding/python.yml | 8809 | - pattern: cryptography.hazmat.primitives.asymmetric.rsa.generate_private_key($EXP, | CODE |
| CRITICAL | tests/precommit_dogfooding/python.yml | 8903 | pattern: cryptography.hazmat.primitives.ciphers.algorithms.IDEA(...) | CODE |
| CRITICAL | tests/precommit_dogfooding/python.yml | 9143 | pattern: cryptography.hazmat.primitives.ciphers.modes.ECB(...) | CODE |
| CRITICAL | tests/rules/not_found_exn2.yaml | 7 | cryptography.hazmat.primitives.asymmetric.rsa.generate_private_key(..., key_size=$VALUE, ...) | CODE |
| CRITICAL | tests/rules/tainted-file-path.yaml | 10 | org.apache.commons.io.FilenameUtils.getName(...) to only retrieve the file | CODE |
| CRITICAL | perf/r2c-rules/r2c-security-audit.yml | 1055 | method such as org.apache.commons.io.FilenameUtils.getName(...) to only | CODE |
| CRITICAL | perf/r2c-rules/r2c-security-audit.yml | 2020 | - pattern: java.nio.file.Files.setPosixFilePermissions($FILE, java.nio.file.attribute.PosixFilePermissions.fromStr | CODE |
| CRITICAL | perf/r2c-rules/r2c-security-audit.yml | 2022 | $TYPE $P = java.nio.file.attribute.PosixFilePermissions.fromString("=~/(^......r..$)|(^.......w.$)|(^........x | CODE |
| CRITICAL | perf/r2c-rules/r2c-security-audit.yml | 2418 | method such as org.apache.commons.io.FilenameUtils.getName(...) to only | CODE |
| CRITICAL | perf/r2c-rules/r2c-security-audit.yml | 3800 | pattern: cryptography.hazmat.primitives.ciphers.algorithms.Blowfish(...) | CODE |
| CRITICAL | perf/r2c-rules/r2c-security-audit.yml | 3815 | pattern: cryptography.hazmat.primitives.ciphers.algorithms.IDEA(...) | CODE |
| CRITICAL | perf/r2c-rules/r2c-security-audit.yml | 3830 | pattern: cryptography.hazmat.primitives.ciphers.algorithms.ARC4(...) | CODE |
| CRITICAL | perf/r2c-rules/r2c-security-audit.yml | 3846 | pattern: cryptography.hazmat.primitives.ciphers.modes.ECB(...) | CODE |
| CRITICAL | perf/r2c-rules/r2c-security-audit.yml | 3899 | - pattern-inside: cryptography.hazmat.primitives.asymmetric.ec.generate_private_key(...) | CODE |
| CRITICAL | perf/r2c-rules/r2c-ci.yml | 556 | method such as org.apache.commons.io.FilenameUtils.getName(...) to only | CODE |
| CRITICAL | perf/r2c-rules/r2c-ci.yml | 891 | method such as org.apache.commons.io.FilenameUtils.getName(...) to only | CODE |
| CRITICAL | perf/r2c-rules/r2c-ci.yml | 1784 | pattern: cryptography.hazmat.primitives.ciphers.algorithms.Blowfish(...) | CODE |
| CRITICAL | perf/r2c-rules/r2c-ci.yml | 1799 | pattern: cryptography.hazmat.primitives.ciphers.algorithms.IDEA(...) | CODE |
| CRITICAL | perf/r2c-rules/r2c-ci.yml | 1814 | pattern: cryptography.hazmat.primitives.ciphers.algorithms.ARC4(...) | CODE |
| CRITICAL | perf/r2c-rules/r2c-ci.yml | 1830 | pattern: cryptography.hazmat.primitives.ciphers.modes.ECB(...) | CODE |
| CRITICAL | perf/r2c-rules/r2c-ci.yml | 1883 | - pattern-inside: cryptography.hazmat.primitives.asymmetric.ec.generate_private_key(...) | CODE |
| CRITICAL | perf/r2c-rules/java.yml | 16 | method such as org.apache.commons.io.FilenameUtils.getName(...) to only | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/patterns/python/wildcard_qualified.py | 1 | CODE | |
| LOW | tests/patterns/python/already_resolved_with_wildcard.py | 2 | CODE | |
| LOW | tests/patterns/python/misc_import.py | 2 | CODE | |
| LOW | tests/patterns/python/misc_import.py | 4 | CODE | |
| LOW | tests/patterns/python/scoped_wildcard.py | 11 | CODE | |
| LOW | tests/patterns/python/import_negatives.py | 2 | CODE | |
| LOW | tests/patterns/python/import_negatives.py | 4 | CODE | |
| LOW | tests/patterns/python/import_negatives.py | 6 | CODE | |
| LOW | tests/patterns/python/import_negatives2.py | 2 | CODE | |
| LOW | tests/patterns/python/import_negatives2.py | 4 | CODE | |
| LOW | tests/patterns/python/import_negatives2.py | 6 | CODE | |
| LOW | tests/patterns/python/import_metavar_fullpath.py | 6 | CODE | |
| LOW | tests/patterns/python/import_metavar_fullpath.py | 8 | CODE | |
| LOW | tests/patterns/python/import_metavar_fullpath.py | 10 | CODE | |
| LOW | tests/patterns/python/import_metavar_fullpath.py | 12 | CODE | |
| LOW | tests/patterns/python/import_metavar_fullpath.py | 14 | CODE | |
| LOW | tests/patterns/python/import_metavar_fullpath.py | 16 | CODE | |
| LOW | tests/patterns/python/misc_regression1.py | 1 | CODE | |
| LOW | tests/patterns/python/imports.py | 3 | CODE | |
| LOW | tests/patterns/python/imports.py | 6 | CODE | |
| LOW | tests/patterns/python/imports.py | 8 | CODE | |
| LOW | tests/patterns/python/imports.py | 11 | CODE | |
| LOW | tests/patterns/python/imports.py | 12 | CODE | |
| LOW | tests/patterns/python/imports.py | 12 | CODE | |
| LOW | tests/patterns/python/imports.py | 14 | CODE | |
| LOW | tests/patterns/python/imports.py | 14 | CODE | |
| LOW | tests/patterns/python/imports.py | 16 | CODE | |
| LOW | tests/patterns/python/imports.py | 16 | CODE | |
| LOW | tests/patterns/python/imports.py | 20 | CODE | |
| LOW | tests/patterns/python/imports.py | 21 | CODE | |
| LOW | tests/patterns/python/imports.py | 22 | CODE | |
| LOW | tests/patterns/python/imports.py | 23 | CODE | |
| LOW | tests/patterns/python/imports.py | 25 | CODE | |
| LOW | tests/patterns/python/imports.py | 26 | CODE | |
| LOW | tests/patterns/python/imports.py | 27 | CODE | |
| LOW | tests/patterns/python/imports.py | 28 | CODE | |
| LOW | tests/patterns/python/imports.py | 29 | CODE | |
| LOW | tests/patterns/python/imports.py | 30 | CODE | |
| LOW | tests/patterns/python/imports.py | 31 | CODE | |
| LOW | tests/patterns/python/imports.py | 32 | CODE | |
| LOW | tests/patterns/python/imports.py | 33 | CODE | |
| LOW | tests/patterns/python/imports.py | 36 | CODE | |
| LOW | tests/patterns/python/imports.py | 36 | CODE | |
| LOW | tests/patterns/python/imports.py | 39 | CODE | |
| LOW | tests/patterns/python/imports.py | 39 | CODE | |
| LOW | tests/patterns/python/imports.py | 42 | CODE | |
| LOW | tests/patterns/python/imports.py | 45 | CODE | |
| LOW | tests/patterns/python/imports.py | 46 | CODE | |
| LOW | tests/patterns/python/imports.py | 47 | CODE | |
| LOW | tests/patterns/python/imports.py | 48 | CODE | |
| LOW | tests/patterns/python/imports.py | 50 | CODE | |
| LOW | tests/patterns/python/imports.py | 51 | CODE | |
| LOW | tests/patterns/python/imports.py | 52 | CODE | |
| LOW | tests/patterns/python/imports.py | 53 | CODE | |
| LOW | tests/patterns/python/imports.py | 54 | CODE | |
| LOW | tests/patterns/python/imports.py | 55 | CODE | |
| LOW | tests/patterns/python/imports.py | 56 | CODE | |
| LOW | tests/patterns/python/imports.py | 57 | CODE | |
| LOW | tests/patterns/python/imports.py | 62 | CODE | |
| LOW | tests/patterns/python/imports.py | 62 | CODE | |
| 128 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | CHANGELOG.md | 2763 | except Exception: | CODE |
| LOW | CHANGELOG.md | 10297 | except Exception: | CODE |
| LOW | tests/patterns/python/deep_try.py | 5 | except Exception: | CODE |
| LOW⚡ | tests/patterns/python/cp_exception.py | 5 | except Exception as e: | CODE |
| LOW⚡ | tests/patterns/python/cp_exception.py | 19 | except Exception as e: | CODE |
| LOW⚡ | tests/patterns/python/cp_exception.py | 31 | except Exception as e: | CODE |
| LOW⚡ | tests/patterns/python/cp_exception.py | 45 | except Exception as e: | CODE |
| LOW⚡ | tests/patterns/python/cp_exception.py | 62 | except Exception as e: | CODE |
| LOW | tests/patterns/python/cp_exception.py | 75 | except Exception as e: | CODE |
| LOW | tests/patterns/python/misc_exn.py | 5 | except Exception: | CODE |
| LOW | tests/rules/taint_exception.py | 14 | except Exception as e: | CODE |
| LOW | tests/rules/taint_exception.py | 25 | except Exception as e: | CODE |
| LOW | tests/rules/taint_exception.py | 59 | except Exception as e: | CODE |
| LOW | tests/rules/taint_exception.py | 70 | except Exception as e: | CODE |
| LOW | tests/rules/taint_exception.py | 98 | except Exception as e: | CODE |
| LOW | tests/rules/taint_exception.py | 115 | except Exception as e: | CODE |
| LOW | tests/rules/taint_exception.py | 131 | except Exception as e: | CODE |
| LOW | tests/rules/taint_exception.py | 148 | except Exception as e: | CODE |
| LOW | tests/rules/taint_exception.py | 171 | except Exception as e: | CODE |
| LOW | tests/rules/taint_exception.py | 185 | except Exception as e: | CODE |
| LOW | tests/rules/taint_clean_in_try_no_finally.py | 5 | except Exception: | CODE |
| LOW | tests/parsing/python/as_pattern.py | 3 | except Exception as e: | CODE |
| LOW | cli/setup.py | 41 | except Exception: | CODE |
| MEDIUM | cli/setup.py | 30 | def linux_detect_libc(): | CODE |
| LOW | cli/tests/default/unit/test_error_handler.py | 185 | except Exception: | CODE |
| LOW | cli/tests/default/unit/test_error_handler.py | 223 | except Exception: | CODE |
| LOW | cli/tests/default/unit/test_error_handler.py | 254 | except Exception: | CODE |
| LOW | cli/src/semdep/package_restrictions.py | 59 | except Exception as e: | CODE |
| LOW | cli/src/semdep/parsers/util.py | 92 | except Exception as e: | CODE |
| LOW | cli/src/semdep/parsers/util.py | 382 | except Exception as e: | CODE |
| LOW | cli/src/semdep/parsers/poetry.py | 281 | except Exception as e: | CODE |
| MEDIUM | cli/src/semgrep/metrics.py | 672 | def gather_click_params(self) -> None: | CODE |
| LOW⚡ | cli/src/semgrep/metrics.py | 234 | except Exception as e: | CODE |
| LOW⚡ | cli/src/semgrep/metrics.py | 243 | except Exception as e: | CODE |
| LOW⚡ | cli/src/semgrep/metrics.py | 249 | except Exception as e: | CODE |
| LOW⚡ | cli/src/semgrep/metrics.py | 423 | except Exception as e: | CODE |
| LOW⚡ | cli/src/semgrep/metrics.py | 431 | except Exception as e: | CODE |
| LOW⚡ | cli/src/semgrep/metrics.py | 439 | except Exception as e: | CODE |
| LOW⚡ | cli/src/semgrep/metrics.py | 445 | except Exception as e: | CODE |
| LOW⚡ | cli/src/semgrep/metrics.py | 451 | except Exception as e: | CODE |
| LOW⚡ | cli/src/semgrep/metrics.py | 457 | except Exception as e: | CODE |
| LOW⚡ | cli/src/semgrep/metrics.py | 463 | except Exception as e: | CODE |
| LOW⚡ | cli/src/semgrep/metrics.py | 470 | except Exception as e: | CODE |
| LOW⚡ | cli/src/semgrep/metrics.py | 610 | except Exception as e: | CODE |
| LOW⚡ | cli/src/semgrep/metrics.py | 619 | except Exception as e: | CODE |
| LOW⚡ | cli/src/semgrep/metrics.py | 628 | except Exception as e: | CODE |
| LOW⚡ | cli/src/semgrep/metrics.py | 637 | except Exception as e: | CODE |
| LOW | cli/src/semgrep/metrics.py | 260 | except Exception as e: | CODE |
| LOW | cli/src/semgrep/metrics.py | 286 | except Exception as e: | CODE |
| LOW | cli/src/semgrep/metrics.py | 298 | except Exception as e: | CODE |
| LOW | cli/src/semgrep/metrics.py | 339 | except Exception as e: | CODE |
| LOW | cli/src/semgrep/metrics.py | 348 | except Exception as e: | CODE |
| LOW | cli/src/semgrep/metrics.py | 383 | except Exception as e: | CODE |
| LOW | cli/src/semgrep/metrics.py | 492 | except Exception as e: | CODE |
| LOW | cli/src/semgrep/metrics.py | 512 | except Exception as e: | CODE |
| LOW | cli/src/semgrep/metrics.py | 531 | except Exception as e: | CODE |
| LOW | cli/src/semgrep/metrics.py | 555 | except Exception as e: | CODE |
| LOW | cli/src/semgrep/metrics.py | 594 | except Exception as e: | CODE |
| LOW | cli/src/semgrep/metrics.py | 685 | except Exception as e: | CODE |
| LOW | cli/src/semgrep/metrics.py | 736 | except Exception as e: | CODE |
| 59 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | semgrep.yml | 1 | # This file contains Semgrep rules. See https://semgrep.dev for more info. | COMMENT |
| MEDIUM | semgrep.yml | 8 | # This file is also used in CI, see .circleci/config.yml | COMMENT |
| MEDIUM⚡ | cli/tests/default/unit/test_saved_scan_config.py | 53 | # Create a handler that will dump the config when handling a scan response | COMMENT |
| MEDIUM⚡ | cli/tests/default/unit/test_saved_scan_config.py | 62 | # Create a second handler that loads the saved config via start_scan | COMMENT |
| MEDIUM | cli/tests/default/unit/test_symbol_analysis.py | 169 | # Create a Java file and gradle lockfile | COMMENT |
| MEDIUM | cli/tests/default/unit/test_symbol_analysis.py | 553 | # Create a subproject directory but scan a different directory | COMMENT |
| MEDIUM | cli/tests/default/e2e-other/parsers/test_yarn.py | 297 | """# This file is generated by running "yarn install" inside your project. | STRING |
| MEDIUM | cli/tests/default/e2e-other/parsers/test_yarn.py | 405 | """# This file is generated by running "yarn install" inside your project. | STRING |
| MEDIUM | cli/tests/default/e2e/test_ignores.py | 29 | # This file is included by the .semgrepignore above. | COMMENT |
| MEDIUM | cli/tests/default/e2e/test_diff_scan_preserves_repo.py | 51 | # Create the rule file (untracked) | COMMENT |
| MEDIUM | …fault/e2e/targets/parse_metrics/partial-parse-error.rb | 193 | # This method is called to process HTTP requests | COMMENT |
| MEDIUM | cli/tests/default/e2e/targets/parse_metrics/ok.rb | 33 | # Create an instance of the Sensu client process, start the | COMMENT |
| MEDIUM | cli/tests/default/e2e/targets/parse_metrics/ok.rb | 57 | # Create a Sensu client keepalive payload, to be sent over the | COMMENT |
| MEDIUM | cli/tests/default/e2e/targets/parse_metrics/ok.rb | 125 | # Create an in progress key for a check, used to determine if an | COMMENT |
| MEDIUM | cli/tests/default/e2e/targets/parse_metrics/ok.rb | 377 | # Create a check execution proc, used to execute standalone | COMMENT |
| MEDIUM | cli/tests/default/e2e/targets/parse_metrics/ok.rb | 560 | # Create a check result intended for deregistering a client. | COMMENT |
| MEDIUM | …default/e2e/targets/dependency_aware/dart/pubspec.yaml | 66 | # The following section is specific to Flutter packages. | COMMENT |
| MEDIUM | cli/src/semdep/parsers/composer.py | 17 | # Import necessary modules and classes | COMMENT |
| MEDIUM | cli/src/semdep/parsers/util.py | 76 | """This class is a callable wrapper around a lockfile and manifest parser | STRING |
| MEDIUM | cli/src/semdep/parsers/yarn.py | 302 | # This file is generated by running "yarn install" inside your project. | COMMENT |
| MEDIUM | cli/src/semdep/matchers/pip_requirements.py | 178 | # Create a subproject from each group of requirements files and the corresponding manifest | COMMENT |
| MEDIUM | cli/src/semdep/external/packaging/tags.py | 2 | # This file is dual licensed under the terms of the Apache License, Version | COMMENT |
| MEDIUM | cli/src/semdep/external/packaging/version.py | 2 | # This file is dual licensed under the terms of the Apache License, Version | COMMENT |
| MEDIUM | cli/src/semdep/external/packaging/__init__.py | 1 | # This file is dual licensed under the terms of the Apache License, Version | COMMENT |
| MEDIUM | cli/src/semdep/external/packaging/utils.py | 2 | # This file is dual licensed under the terms of the Apache License, Version | COMMENT |
| MEDIUM | cli/src/semdep/external/packaging/_structures.py | 2 | # This file is dual licensed under the terms of the Apache License, Version | COMMENT |
| MEDIUM | cli/src/semdep/external/packaging/__about__.py | 1 | # This file is dual licensed under the terms of the Apache License, Version | COMMENT |
| MEDIUM | cli/src/semdep/external/packaging/specifiers.py | 2 | # This file is dual licensed under the terms of the Apache License, Version | COMMENT |
| MEDIUM | cli/src/semgrep/profile_manager.py | 25 | # This method is an even more rudimentary tool for profiling | COMMENT |
| MEDIUM | cli/src/semgrep/test.py | 13 | # This file is DEPRECATED! Please modify instead osemgrep test in | COMMENT |
| MEDIUM | cli/src/semgrep/join_rule.py | 557 | # Create a model map. This allows dynamically creating DB tables based | COMMENT |
| MEDIUM | cli/src/semgrep/output_extra.py | 22 | # This class is easily extendable if we want to add more information to the CLI output | COMMENT |
| MEDIUM | cli/src/semgrep/output.py | 133 | # This class is the internal representation of OutputSettings below. | COMMENT |
| MEDIUM | cli/src/semgrep/mcp/server.py | 255 | # Create a temporary directory | COMMENT |
| MEDIUM | cli/src/semgrep/console_scripts/entrypoint.py | 2 | # This file is the Semgrep CLI entry point of the Semgrep pip package, | COMMENT |
| MEDIUM | cli/src/semgrep/console_scripts/pysemgrep.py | 16 | # This file is not part of the Python 'semgrep' package; it's a script. | COMMENT |
| MEDIUM | cli/src/semgrep/commands/mcp.py | 185 | # Create a fast MCP server | STRING |
| MEDIUM | cli/src/semgrep/external/git_url_parser.py | 1 | # This file is forked from https://github.com/coala/git-url-parse/blob/master/giturlparse/parser.py | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cli/setup.py | 76 | CODE | |
| LOW | cli/tests/conftest.py | 313 | CODE | |
| LOW | cli/tests/conftest.py | 425 | CODE | |
| LOW | cli/tests/default/unit/test_semgrep_test.py | 50 | CODE | |
| LOW | cli/tests/default/e2e-other/test_ssc.py | 610 | CODE | |
| LOW | cli/src/semdep/golang_version.py | 226 | CODE | |
| LOW | cli/src/semdep/golang_version.py | 332 | CODE | |
| LOW | cli/src/semdep/package_restrictions.py | 30 | CODE | |
| LOW | cli/src/semdep/maven_version.py | 98 | CODE | |
| LOW | cli/src/semdep/maven_version.py | 138 | CODE | |
| LOW | cli/src/semdep/parsers/pnpm.py | 480 | CODE | |
| LOW | cli/src/semdep/parsers/composer.py | 61 | CODE | |
| LOW | cli/src/semdep/parsers/go_mod.py | 107 | CODE | |
| LOW | cli/src/semdep/parsers/pom_tree.py | 91 | CODE | |
| LOW | cli/src/semdep/parsers/pubspec_lock.py | 39 | CODE | |
| LOW | cli/src/semdep/matchers/gradle.py | 98 | CODE | |
| LOW | cli/src/semdep/external/packaging/tags.py | 314 | CODE | |
| LOW | cli/src/semdep/external/packaging/tags.py | 346 | CODE | |
| LOW | cli/src/semdep/external/packaging/version.py | 197 | CODE | |
| LOW | cli/src/semdep/external/packaging/version.py | 394 | CODE | |
| LOW | cli/src/semdep/external/packaging/_manylinux.py | 267 | CODE | |
| LOW | cli/src/semdep/external/packaging/specifiers.py | 752 | CODE | |
| LOW | cli/src/semgrep/dependency_aware_rule.py | 148 | CODE | |
| LOW | cli/src/semgrep/dependency_aware_rule.py | 333 | CODE | |
| LOW | cli/src/semgrep/scan_report.py | 246 | CODE | |
| LOW | cli/src/semgrep/scan_report.py | 259 | CODE | |
| LOW | cli/src/semgrep/metrics.py | 301 | CODE | |
| LOW | cli/src/semgrep/subproject.py | 138 | CODE | |
| LOW | cli/src/semgrep/subproject.py | 160 | CODE | |
| LOW | cli/src/semgrep/subproject.py | 176 | CODE | |
| LOW | cli/src/semgrep/subproject.py | 399 | CODE | |
| LOW | cli/src/semgrep/error_location.py | 162 | CODE | |
| LOW | cli/src/semgrep/error.py | 249 | CODE | |
| LOW | cli/src/semgrep/error.py | 563 | CODE | |
| LOW | cli/src/semgrep/error.py | 565 | CODE | |
| LOW | cli/src/semgrep/symbol_analysis.py | 87 | CODE | |
| LOW | cli/src/semgrep/symbol_analysis.py | 201 | CODE | |
| LOW | cli/src/semgrep/rule_match.py | 516 | CODE | |
| LOW | cli/src/semgrep/rule_match.py | 579 | CODE | |
| LOW | cli/src/semgrep/test.py | 161 | CODE | |
| LOW | cli/src/semgrep/core_runner.py | 282 | CODE | |
| LOW | cli/src/semgrep/core_runner.py | 880 | CODE | |
| LOW | cli/src/semgrep/core_runner.py | 966 | CODE | |
| LOW | cli/src/semgrep/run_scan.py | 271 | CODE | |
| LOW | cli/src/semgrep/run_scan.py | 405 | CODE | |
| LOW | cli/src/semgrep/run_scan.py | 482 | CODE | |
| LOW | cli/src/semgrep/run_scan.py | 700 | CODE | |
| LOW | cli/src/semgrep/run_scan.py | 971 | CODE | |
| LOW | cli/src/semgrep/run_scan.py | 1034 | CODE | |
| LOW | cli/src/semgrep/run_scan.py | 1258 | CODE | |
| LOW | cli/src/semgrep/target_manager.py | 96 | CODE | |
| LOW | cli/src/semgrep/target_manager.py | 239 | CODE | |
| LOW | cli/src/semgrep/target_manager.py | 302 | CODE | |
| LOW | cli/src/semgrep/target_manager.py | 1192 | CODE | |
| LOW | cli/src/semgrep/join_rule.py | 140 | CODE | |
| LOW | cli/src/semgrep/rpc.py | 186 | CODE | |
| LOW | cli/src/semgrep/engine.py | 45 | CODE | |
| LOW | cli/src/semgrep/engine.py | 130 | CODE | |
| LOW | cli/src/semgrep/rule.py | 277 | CODE | |
| LOW | cli/src/semgrep/rule.py | 295 | CODE | |
| 37 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/perf/timeout.js | 749 | if (input.val() == input.attr('placeholder')) { | CODE |
| LOW⚡ | tests/perf/timeout.js | 751 | input.removeClass('placeholder'); | CODE |
| LOW⚡ | tests/perf/timeout.js | 755 | if (input.val() == '' || input.val() == input.attr('placeholder')) { | CODE |
| LOW⚡ | tests/perf/timeout.js | 756 | input.addClass('placeholder'); | CODE |
| LOW⚡ | tests/perf/timeout.js | 757 | input.val(input.attr('placeholder')); | CODE |
| LOW | tests/perf/timeout.js | 980 | if (input.val() == input.attr('placeholder')) { | CODE |
| LOW | tests/perf/timeout.js | 1091 | return !('placeholder' in i); | CODE |
| LOW | tests/perf/timeout.js | 1137 | if (!$(cartIdField).hasClass('placeholder') && $("input[name='customerId']").val().length > 0) { | CODE |
| LOW | tests/perf/timeout.js | 1177 | if (!$(el).hasClass('placeholder')) { | CODE |
| LOW | cli/tests/conftest.py | 497 | env_["SEMGREP_APP_TOKEN"] = "fake_token" | CODE |
| LOW⚡ | cli/tests/default/e2e-other/test_login.py | 46 | # for the input=fake_key to work? | COMMENT |
| LOW⚡ | cli/tests/default/e2e-other/test_login.py | 49 | fake_key = "key123" | CODE |
| LOW⚡ | cli/tests/default/e2e-other/test_login.py | 56 | input=fake_key, | CODE |
| LOW | cli/tests/default/e2e-other/test_login.py | 70 | fake_key = "key123" | CODE |
| LOW | cli/tests/default/e2e-other/test_login.py | 84 | env={"SEMGREP_APP_TOKEN": fake_key}, | CODE |
| LOW | cli/tests/default/e2e-other/test_login.py | 110 | fake_key = "key123" | CODE |
| LOW | cli/tests/default/e2e-other/test_login.py | 122 | env={"SEMGREP_APP_TOKEN": fake_key}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 1332 | # env["SEMGREP_APP_TOKEN"] = "fake-key-from-tests" | COMMENT |
| LOW | cli/tests/default/e2e-other/test_ci.py | 1024 | env["SEMGREP_APP_TOKEN"] = "fake-key-from-tests" | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 1196 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 1493 | env["SEMGREP_APP_TOKEN"] = "fake-key-from-tests" | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 1644 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 1685 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 1715 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 1746 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 1809 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 1849 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 1902 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 1939 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 1979 | "SEMGREP_APP_TOKEN": "fake-key-from-tests", | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2008 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2045 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2067 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2096 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2115 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2134 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2169 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2190 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2213 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2256 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2296 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2330 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2349 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2382 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2401 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2419 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2438 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2492 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2534 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2584 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2658 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2727 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2809 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2848 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2894 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2993 | env={"SEMGREP_APP_TOKEN": "fake-key-from-tests"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 3089 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 3133 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 3323 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| LOW | cli/tests/default/e2e-other/test_ci.py | 3537 | env={"SEMGREP_APP_TOKEN": "fake_key"}, | CODE |
| 18 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .pre-commit-hooks.yaml | 14 | # for pre-commit. Essentially, setup.py runs 'pip install semgrep==0.xxx.yyy'. | COMMENT |
| MEDIUM | tests/perf/l10000.js | 3514 | // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes | COMMENT |
| MEDIUM | tests/perf/l10000.js | 3838 | // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes | COMMENT |
| MEDIUM | tests/perf/three.js | 3514 | // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes | COMMENT |
| MEDIUM | tests/perf/three.js | 3838 | // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes | COMMENT |
| MEDIUM | tests/perf/bloom/l10000.js | 3515 | // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes | COMMENT |
| MEDIUM | tests/perf/bloom/l10000.js | 3839 | // this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes | COMMENT |
| MEDIUM | cli/tests/default/e2e/targets/parse_metrics/ok.rb | 143 | # tokens. Hook commands may expect/read and utilize JSON | COMMENT |
| MEDIUM | cli/tests/default/e2e/targets/parse_metrics/ok.rb | 251 | # method as a parameter, the extension may utilize it. This | COMMENT |
| MEDIUM | cli/tests/default/e2e/targets/bad/invalid_c_long.c | 1 | /*;--------------------------------------------------------------------------;;This program, "bzip2", the associated lib | COMMENT |
| LOW | cli/src/semdep/parsers/gradle.py | 105 | # support for manifest parsing. In that case just use the lockfile. | COMMENT |
| LOW | cli/src/semdep/external/packaging/specifiers.py | 500 | # version. If it's not we can short circuit and just return False now | STRING |
| LOW | cli/src/semdep/external/packaging/specifiers.py | 526 | # version. If it's not we can short circuit and just return False now | STRING |
| LOW | cli/src/semdep/external/packaging/specifiers.py | 707 | # then we'll just return None since we don't know if this should have | STRING |
| MEDIUM | cli/src/semgrep/dependency_aware_rule.py | 306 | # TODO: associate these in a more robust way. This currently | COMMENT |
| LOW | cli/src/semgrep/git.py | 420 | # If we already know that the base commit is the merge base, just return | STRING |
| LOW | cli/src/semgrep/error.py | 541 | # TODO: generalize in a SemgrepCliError and just pass the level, code and type_ | COMMENT |
| LOW | cli/src/semgrep/rpc.py | 135 | # date, let's just use a catch-all. In the end it doesn't really matter | COMMENT |
| LOW | cli/src/semgrep/rule.py | 339 | # /weird/), just return the empty string, and we'll hash based on rule id + | COMMENT |
| MEDIUM | cli/src/semgrep/resolve_dependency_source.py | 460 | # TODO: Reimplement this once more robust error handling for lockfileless resolution is implemented | COMMENT |
| LOW | cli/src/semgrep/mcp/semgrep.py | 235 | # if they exist on the local filesystem, we could just pass the paths | COMMENT |
| LOW | cli/src/semgrep/console_scripts/entrypoint.py | 18 | # semgrep-core, but it is simple from Python because you can simply use | COMMENT |
| MEDIUM | cli/src/semgrep/console_scripts/entrypoint.py | 22 | # Again, it is simpler to use a Python script and leverage importlib.resources. | COMMENT |
| MEDIUM | cli/src/semgrep/console_scripts/entrypoint.py | 172 | # test harness, etc.), set NO_COLOR so cmdliner reverts to plain output. | COMMENT |
| LOW | cli/src/semgrep/semgrep_interfaces/rule_schema_v1.yaml | 281 | # I would normally just use `allOf`, but since it doensn't short circuit, | COMMENT |
| MEDIUM | cli/src/semgrep/semgrep_interfaces/generate.py | 80 | # Constructors are sorted by increasing maturity to facilitate meaningful | COMMENT |
| LOW | cli/src/semgrep/commands/ci.py | 1047 | # settings have been passed. So we can just use the "normal" | COMMENT |
| MEDIUM | cli/src/semgrep/commands/scan.py | 897 | # I wish there was an easy way to leverage the engine_params from the | COMMENT |
| MEDIUM | perf/configs/ci_small_repos.yaml | 85 | # For more comprehensive rule timing information | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | cli/tests/default/unit/test_yaml_parsing.py | 0 | rules: - id: rule_id pattern: | $x == $x $y == $y languages: [python] severity: info message: bad | STRING |
| HIGH | cli/tests/default/unit/test_rule_match.py | 0 | rules: - id: rule_id pattern: | $x == $x $y == $y languages: [python] severity: info message: bad | STRING |
| HIGH | cli/tests/default/unit/test_match_hashes.py | 0 | rules: - id: rule_id pattern: | $x == $x $y == $y languages: [python] severity: info message: bad | STRING |
| HIGH | …lt/e2e/targets/autofix/django-none-password-default.py | 0 | creates and saves a poster with the given email and password. | STRING |
| HIGH | …o-none-password-default.py-text-not-dryrun/results.txt | 0 | creates and saves a poster with the given email and password. | STRING |
| HIGH | …jango-none-password-default.py-text-dryrun/results.txt | 0 | creates and saves a poster with the given email and password. | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | cli/tests/default/e2e-other/parsers/test_swiftpm.py | 342 | "branch": null, | STRING |
| HIGH⚡ | cli/tests/default/e2e-other/parsers/test_swiftpm.py | 351 | "branch": null, | STRING |
| HIGH⚡ | cli/tests/default/e2e-other/parsers/test_swiftpm.py | 360 | "branch": null, | STRING |
| HIGH | cli/src/semgrep/mcp/server.py | 1201 | - Run: `semgrep install-semgrep-pro || true` | CODE |
| HIGH | cli/src/semgrep/mcp/hooks/post_tool.py | 43 | # "decision": "block"|undefined, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/patterns/js/dots_stmts.js | 5 | print("do stuff"); | CODE |
| HIGH | tests/patterns/js/deep_exprstmt.js | 10 | print(bar()); | CODE |
| HIGH | tests/patterns/ts/deep_exprstmt.ts | 10 | print(bar()); | CODE |
| HIGH | tests/patterns/ts/dots_stmts.ts | 5 | print("do stuff"); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cli/tests/default/mcp/test_create_temp_files.py | 40 | # Check if temp directory was created | COMMENT |
| LOW | cli/tests/default/mcp/test_create_temp_files.py | 44 | # Check if files were created with correct content | COMMENT |
| LOW | cli/tests/default/mcp/test_create_temp_files.py | 71 | # Check if temp directory was created | COMMENT |
| LOW | cli/tests/default/mcp/test_create_temp_files.py | 101 | # Check if temp directory was created | COMMENT |
| LOW | cli/tests/default/e2e-other/test_ci.py | 2940 | # Check if we should mimic an existing settings file via simulation | COMMENT |
| LOW | cli/src/semdep/golang_version.py | 155 | ): # Check if anything exists after the core version spec | CODE |
| LOW | cli/src/semdep/golang_version.py | 251 | # Check if the identifier is a number | COMMENT |
| LOW | cli/src/semdep/matchers/pip_requirements.py | 127 | # Check if the lockfile is in a 'requirements' directory | COMMENT |
| LOW | cli/src/semgrep/scan_report.py | 513 | # Check if any secret rule has the generic secrets AI ruleset | COMMENT |
| LOW | cli/src/semgrep/main.py | 95 | # Check if any of the exclusionary commands are provided | COMMENT |
| LOW | cli/src/semgrep/mcp/server.py | 212 | # Check if normalized path is still absolute | COMMENT |
| LOW | .github/workflows/sync-with-PRO.yml | 64 | # Check if any commits are already synced from Pro | COMMENT |
| LOW | src/main/flags.sh | 46 | # Check if SEMGREP_NIX_BUILD is not set | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/tainting_rules/python/simpl_django_redirect.py | 36 | CODE | |
| LOW | tests/rules/metavar_pattern_open_redirect.py | 52 | CODE | |
| LOW | tests/rules/sym_prop_open_redirect.py | 52 | CODE | |
| LOW | tests/perf/timeout.py | 70 | CODE | |
| LOW | tests/perf/force_timeout.py | 70 | CODE | |
| LOW | tests/perf/timeout_gracefully.py | 66 | CODE | |
| LOW | cli/tests/conftest.py | 425 | CODE | |
| LOW | cli/tests/fixtures.py | 48 | CODE | |
| LOW | cli/tests/default/unit/test_scans_v2.py | 55 | CODE | |
| LOW | cli/tests/default/unit/test_scans_v2.py | 64 | CODE | |
| LOW | cli/tests/default/e2e-other/test_ci.py | 3209 | CODE | |
| LOW | cli/tests/default/e2e-other/test_ci.py | 3403 | CODE | |
| LOW | …tests/default/e2e/targets/equivalence/open_redirect.py | 66 | CODE | |
| LOW | cli/tests/default/e2e/targets/test_test/long.py | 66 | CODE | |
| LOW | cli/src/semgrep/rule_match.py | 576 | CODE | |
| LOW | cli/src/semgrep/core_runner.py | 575 | CODE | |
| LOW | cli/src/semgrep/run_scan.py | 1034 | CODE | |
| LOW | cli/src/semgrep/run_scan.py | 1258 | CODE | |
| LOW | cli/src/semgrep/output.py | 414 | CODE | |
| LOW | cli/src/semgrep/app/scans.py | 97 | CODE | |
| LOW | cli/src/semgrep/mcp/server.py | 629 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/parsing/cpp/operator_templated3.cpp | 7 | :: don't forget to update hdf5_daa_layer.cu accordingly | CODE |
| LOW | cli/tests/conftest.py | 501 | # so make sure to explicitly delete any ambient CI variables. | COMMENT |
| LOW | cli/tests/default/e2e/test_permissions.py | 90 | # We make sure to not run as root since it can read files lacking | COMMENT |
| MEDIUM | …default/e2e/targets/dependency_aware/dart/pubspec.yaml | 70 | # included with your application, so that you can use the icons in | COMMENT |
| MEDIUM | cli/src/semgrep/console_scripts/entrypoint.py | 39 | # alt: you can also add '-W ignore::DeprecationWarning' after the python3 above, | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | cli/src/semdep/parsers/pnpm.py | 414 | Parses the dependencies of a package in a `pnpm-lock.yaml` file (version >=9.0). In pnpm-lock.yaml files versi | STRING |
| HIGH | cli/src/semgrep/mcp/server.py | 240 | Creates temporary files from code content Args: code_files: List of CodeFile objects Returns: | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | README.md | 134 | - [Semgrep Code (SAST)](https://semgrep.dev/products/semgrep-code?utm_medium=readme&utm_source=github&utm_content=semg | CODE |
| MEDIUM | cli/README.md | 134 | - [Semgrep Code (SAST)](https://semgrep.dev/products/semgrep-code?utm_medium=readme&utm_source=github&utm_content=semg | CODE |
| MEDIUM⚡ | cli/tests/default/unit/test_scans_v2.py | 313 | # POST-retry orchestration tests (mock _poll_for_config_v2 directly) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/naming/python/scope.py | 13 | CODE | |
| MEDIUM | tests/naming/python/scope.py | 14 | CODE | |
| MEDIUM | tests/rules/taint_exception.py | 8 | CODE | |
| MEDIUM | tests/rules/taint_exception.py | 53 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cli/src/semdep/external/packaging/tags.py | 26 | logger = logging.getLogger(__name__) | CODE |
| LOW | cli/src/semdep/external/packaging/version.py | 14 | __all__ = ["parse", "Version", "LegacyVersion", "InvalidVersion", "VERSION_PATTERN"] | CODE |
| LOW | cli/src/semdep/external/packaging/__init__.py | 16 | __all__ = [ | CODE |
| LOW | cli/src/semdep/external/packaging/__about__.py | 5 | __all__ = [ | CODE |
| LOW | cli/src/semgrep/telemetry.py | 263 | def update_attributes(self, new_attrs: Attributes) -> None: | CODE |
| LOW | cli/src/semgrep/app/auth.py | 23 | logger = logging.getLogger(__name__) | CODE |
| LOW | cli/src/semgrep/app/auth.py | 94 | def set_token(token: str) -> None: | CODE |
| LOW | …grep/semgrep_interfaces/scripts/jsonschema2protobuf.py | 19 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | cli/tests/default/unit/test_paths_to_transitivity.py | 106 | This entire paragraph was pretty much generated by Copilot wow | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cli/src/semgrep/target_manager.py | 250 | # this print statement we need to check if any target is in a | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | cli/src/semgrep/mcp/hooks/inject_secure_defaults.py | 207 | # TODO: implement this hook for Windsurf | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/generate_cheatsheet.py | 5 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/rules/taint_clean_in_try_no_finally.py | 1 | def test_function(): | CODE |