Suricata is a network Intrusion Detection System, Intrusion Prevention System and Network Security Monitoring engine developed by the OISF and the Suricata community.
This report summarizes scanner evidence for OISF/suricata, a C project with 6,798 GitHub stars. SynthScan examined 617,281 lines of code across 1695 source files, recording 941 pattern matches distributed across 15 syntactic categories. The legacy adjusted pattern signal is 1.6 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 888 finding(s).
Are imports declared and package/API names verified? 10 finding(s).
Are wrappers, guards, and repeated structures necessary? 46 finding(s).
Which changes need focused human review? 941 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 941 distinct pattern matches across 15 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bundle.txt | 1 | # Specify suricata-update requirements. | COMMENT |
| LOW | doxygen.cfg | 1 | # Doxyfile 1.8.17 | COMMENT |
| LOW | doxygen.cfg | 21 | # file that follow. The default is UTF-8 which is also the encoding used for all | COMMENT |
| LOW | doxygen.cfg | 41 | PROJECT_NUMBER = | COMMENT |
| LOW | doxygen.cfg | 61 | OUTPUT_DIRECTORY = "doc/doxygen" | COMMENT |
| LOW | doxygen.cfg | 81 | # The OUTPUT_LANGUAGE tag is used to specify the language in which all | COMMENT |
| LOW | doxygen.cfg | 101 | COMMENT | |
| LOW | doxygen.cfg | 141 | # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then | COMMENT |
| LOW | doxygen.cfg | 161 | FULL_PATH_NAMES = YES | COMMENT |
| LOW | doxygen.cfg | 181 | COMMENT | |
| LOW | doxygen.cfg | 201 | # such as | COMMENT |
| LOW | doxygen.cfg | 221 | # to treat a multi-line C++ comment block as a detailed description. Set this | COMMENT |
| LOW | doxygen.cfg | 241 | SEPARATE_MEMBER_PAGES = NO | COMMENT |
| LOW | doxygen.cfg | 261 | # commands \{ and \} for these it is advised to use the version @{ and @} or use | COMMENT |
| LOW | doxygen.cfg | 281 | # Python sources only. Doxygen will then generate output that is more tailored | COMMENT |
| LOW | doxygen.cfg | 301 | # sources only. Doxygen will then generate output that is more tailored for that | COMMENT |
| LOW | doxygen.cfg | 321 | # Note: For files without extension you can use no_extension as a placeholder. | COMMENT |
| LOW | doxygen.cfg | 341 | # Note: This feature currently applies only to Markdown headings. | COMMENT |
| LOW | doxygen.cfg | 361 | # The default value is: NO. | COMMENT |
| LOW | doxygen.cfg | 381 | # doxygen to replace the get and set methods by a property in the documentation. | COMMENT |
| LOW | doxygen.cfg | 401 | COMMENT | |
| LOW | doxygen.cfg | 421 | COMMENT | |
| LOW | doxygen.cfg | 441 | # The default value is: NO. | COMMENT |
| LOW | doxygen.cfg | 461 | COMMENT | |
| LOW | doxygen.cfg | 481 | COMMENT | |
| LOW | doxygen.cfg | 501 | COMMENT | |
| LOW | doxygen.cfg | 521 | # If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all | COMMENT |
| LOW | doxygen.cfg | 541 | COMMENT | |
| LOW | doxygen.cfg | 561 | # in case and if your file system supports case sensitive file names. Windows | COMMENT |
| LOW | doxygen.cfg | 581 | # If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of | COMMENT |
| LOW | doxygen.cfg | 601 | # documentation for inline members. | COMMENT |
| LOW | doxygen.cfg | 621 | # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the | COMMENT |
| LOW | doxygen.cfg | 641 | # fully-qualified names, including namespaces. If set to NO, the class list will | COMMENT |
| LOW | doxygen.cfg | 661 | # list. This list is created by putting \todo commands in the documentation. | COMMENT |
| LOW | doxygen.cfg | 681 | # The default value is: YES. | COMMENT |
| LOW | doxygen.cfg | 701 | COMMENT | |
| LOW | doxygen.cfg | 721 | SHOW_NAMESPACES = YES | COMMENT |
| LOW | doxygen.cfg | 741 | # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE | COMMENT |
| LOW | doxygen.cfg | 761 | # standard output by doxygen. If QUIET is set to YES this implies that the | COMMENT |
| LOW | doxygen.cfg | 781 | WARN_IF_UNDOCUMENTED = NO | COMMENT |
| LOW | doxygen.cfg | 801 | # a warning is encountered. | COMMENT |
| LOW | doxygen.cfg | 821 | COMMENT | |
| LOW | doxygen.cfg | 841 | INPUT_ENCODING = UTF-8 | COMMENT |
| LOW | doxygen.cfg | 921 | COMMENT | |
| LOW | doxygen.cfg | 941 | # wildcard * is used, a substring. Examples: ANamespace, AClass, | COMMENT |
| LOW | doxygen.cfg | 961 | COMMENT | |
| LOW | doxygen.cfg | 981 | # where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the | COMMENT |
| LOW | doxygen.cfg | 1001 | # patterns match the file name, INPUT_FILTER is applied. | COMMENT |
| LOW | doxygen.cfg | 1021 | COMMENT | |
| LOW | doxygen.cfg | 1061 | REFERENCED_BY_RELATION = YES | COMMENT |
| LOW | doxygen.cfg | 1081 | # can opt to disable this feature. | COMMENT |
| LOW | doxygen.cfg | 1101 | # | COMMENT |
| LOW | doxygen.cfg | 1121 | # If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all | COMMENT |
| LOW | doxygen.cfg | 1141 | IGNORE_PREFIX = | COMMENT |
| LOW | doxygen.cfg | 1161 | # generated HTML page (for example: .htm, .php, .asp). | COMMENT |
| LOW | doxygen.cfg | 1181 | # default header when upgrading to a newer version of doxygen. For a description | COMMENT |
| LOW | doxygen.cfg | 1201 | # sheet that doxygen normally uses. | COMMENT |
| LOW | doxygen.cfg | 1221 | COMMENT | |
| LOW | doxygen.cfg | 1241 | HTML_COLORSTYLE_HUE = 220 | COMMENT |
| LOW | doxygen.cfg | 1261 | COMMENT | |
| 775 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | doxygen.cfg | 2066 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | doxygen.cfg | 2068 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | doxygen.cfg | 2078 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | doxygen.cfg | 2080 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 16 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 18 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 458 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 460 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 756 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 758 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 822 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 824 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 1031 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 1033 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 1117 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 1119 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 1143 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 1145 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 1704 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 1706 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 1895 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 1897 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 1961 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 1963 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 2005 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 2007 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 2039 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 2041 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 2116 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 2118 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 2194 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 2196 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 2240 | #--------------------------------------------------------------------------- | COMMENT |
| MEDIUM | doxygen.cfg | 2242 | #--------------------------------------------------------------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | doxygen.cfg | 321 | # Note: For files without extension you can use no_extension as a placeholder. | COMMENT |
| MEDIUM | doxygen.cfg | 843 | # If the value of the INPUT tag contains directories, you can use the | COMMENT |
| MEDIUM | doxygen.cfg | 929 | # If the value of the INPUT tag contains directories, you can use the | COMMENT |
| MEDIUM | doxygen.cfg | 955 | # If the value of the EXAMPLE_PATH tag contains directories, you can use the | COMMENT |
| LOW | rust/sys/src/sys.rs | 1073 | #[doc = " \\brief The various log levels\n NOTE: when adding new level, don't forget to update SCLogMapLogLevelToSyslogL | COMMENT |
| LOW | rust/sys/src/sys.rs | 1073 | #[doc = " \\brief The various log levels\n NOTE: when adding new level, don't forget to update SCLogMapLogLevelToSyslogL | COMMENT |
| MEDIUM | examples/plugins/c-json-filetype/filetype.c | 30 | /** The thread ID, for demonstration purposes only. */ | COMMENT |
| LOW | src/util-debug.h | 32 | * NOTE: when adding new level, don't forget to update SCLogMapLogLevelToSyslogLevel() | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | qa/live/tenant-1.yaml | 12 | ## Step 1: Inform Suricata about your network | COMMENT |
| LOW | qa/live/netns/ips-netns.yaml | 12 | ## Step 1: Inform Suricata about your network | COMMENT |
| LOW | qa/live/netns/ips-netns.yaml | 56 | ## Step 2: Select outputs to enable | COMMENT |
| LOW | qa/live/netns/fw-netns.yaml | 12 | ## Step 1: Inform Suricata about your network | COMMENT |
| LOW | qa/live/netns/fw-netns.yaml | 56 | ## Step 2: Select outputs to enable | COMMENT |
| LOW | qa/live/netns/ips-netns-bond.yaml | 12 | ## Step 1: Inform Suricata about your network | COMMENT |
| LOW | qa/live/netns/ips-netns-bond.yaml | 56 | ## Step 2: Select outputs to enable | COMMENT |
| LOW | qa/live/netns/ips-netns-bond2.yaml | 12 | ## Step 1: Inform Suricata about your network | COMMENT |
| LOW | qa/live/netns/ips-netns-bond2.yaml | 56 | ## Step 2: Select outputs to enable | COMMENT |
| LOW | src/datasets-context-json.c | 74 | /* if value is 0 then we need to check if some parsing has been done */ | COMMENT |
| LOW | src/detect.c | 2188 | /* if our first rule is beyond the starting state, we need to check if | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | qa/live/tenant-1.yaml | 12 | ## Step 1: Inform Suricata about your network | COMMENT |
| LOW | qa/live/netns/ips-netns.yaml | 12 | ## Step 1: Inform Suricata about your network | COMMENT |
| LOW | qa/live/netns/ips-netns.yaml | 56 | ## Step 2: Select outputs to enable | COMMENT |
| LOW | qa/live/netns/fw-netns.yaml | 12 | ## Step 1: Inform Suricata about your network | COMMENT |
| LOW | qa/live/netns/fw-netns.yaml | 56 | ## Step 2: Select outputs to enable | COMMENT |
| LOW | qa/live/netns/ips-netns-bond.yaml | 12 | ## Step 1: Inform Suricata about your network | COMMENT |
| LOW | qa/live/netns/ips-netns-bond.yaml | 56 | ## Step 2: Select outputs to enable | COMMENT |
| LOW | qa/live/netns/ips-netns-bond2.yaml | 12 | ## Step 1: Inform Suricata about your network | COMMENT |
| LOW | qa/live/netns/ips-netns-bond2.yaml | 56 | ## Step 2: Select outputs to enable | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | rust/htp/src/test/common.rs | 407 | /// Example usage: | COMMENT |
| LOW | rust/htp/src/test/common.rs | 451 | /// Example usage: | COMMENT |
| LOW | rust/htp/src/test/common.rs | 468 | /// Example usage: | COMMENT |
| LOW | rust/htp/src/test/common.rs | 485 | /// Example usage: | COMMENT |
| LOW | rust/htp/src/test/common.rs | 530 | /// Example usage: | COMMENT |
| LOW | rust/htp/src/test/common.rs | 544 | /// Example usage: | COMMENT |
| LOW | rust/htp/src/test/common.rs | 566 | /// Example usage: | COMMENT |
| LOW | qa/live/dpdk/dpdk-testsuite.sh | 6 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/evedoc.py | 27 | CODE | |
| LOW | scripts/evedoc.py | 43 | CODE | |
| LOW | scripts/evedoc.py | 99 | CODE | |
| LOW | scripts/setup-app-layer.py | 36 | CODE | |
| LOW | scripts/schema-sort.py | 12 | CODE | |
| LOW | scripts/schema-sort.py | 46 | CODE | |
| LOW | scripts/schema-sort.py | 82 | CODE | |
| LOW | scripts/eve-parity.py | 69 | CODE | |
| LOW | scripts/eve-parity.py | 78 | CODE | |
| LOW | doc/userguide/convert.py | 35 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/check-doc-rules.py | 9 | CODE | |
| LOW | scripts/check-enum-uint-keywords.py | 10 | CODE | |
| LOW | scripts/check-uint-keywords.py | 10 | CODE | |
| LOW | scripts/check-dist-rules.py | 6 | CODE | |
| LOW | scripts/dnp3-gen/dnp3-gen.py | 22 | CODE | |
| LOW | doc/userguide/conf.py | 15 | CODE | |
| LOW | doc/userguide/conf.py | 17 | CODE | |
| LOW | doc/userguide/conf.py | 19 | CODE | |
| LOW | doc/userguide/conf.py | 139 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/setup-app-layer.py | 29 | except Exception as err: | CODE |
| LOW | scripts/schema-sort.py | 103 | except Exception as e: | CODE |
| MEDIUM | scripts/schema-sort.py | 104 | print(f"Error reading schema file: {e}", file=sys.stderr) | CODE |
| LOW | scripts/schema-sort.py | 127 | except Exception as e: | CODE |
| MEDIUM | scripts/schema-sort.py | 128 | print(f"Error writing schema file: {e}", file=sys.stderr) | CODE |
| LOW | scripts/dnp3-gen/dnp3-gen.py | 238 | except Exception as err: | STRING |
| LOW | scripts/dnp3-gen/dnp3-gen.py | 324 | except Exception as err: | STRING |
| LOW | scripts/dnp3-gen/dnp3-gen.py | 668 | except Exception as err: | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/rustc.py | 11 | except: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/dnp3-gen/dnp3-gen.py | 359 | for (int j = 0; j < 8 && count; j = j + {{object.fields[0].width}}) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | doxygen.cfg | 1203 | # it is more robust and this tag (HTML_STYLESHEET) will in the future become | COMMENT |
| MEDIUM | doxygen.cfg | 1213 | # standard style sheet and is therefore more robust against future updates. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | doc/userguide/conf.py | 6 | # This file is execfile()d with the current directory set to its | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/setup-app-layer.py | 105 | def patch_rust_applayer_mod_rs(protoname, arg): | CODE |
| LOW | scripts/setup-app-layer.py | 176 | def logger_patch_suricata_yaml_in(proto): | STRING |
| LOW | scripts/setup-app-layer.py | 248 | def detect_patch_detect_engine_register_c(protoname): | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/clang-format.sh | 352 | # Check if branch formatting is correct. | COMMENT |