The most scalable and reliable MQTT broker for AI, IoT, IIoT and connected vehicles
This report summarizes scanner evidence for emqx/emqx, a Erlang project with 16,782 GitHub stars. SynthScan examined 87,745 lines of code across 1725 source files, recording 396 pattern matches distributed across 18 syntactic categories. The legacy adjusted pattern signal is 6.7 (Moderate 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.
Can maintainers explain intent, assumptions, and trade-offs? 287 finding(s).
Are imports declared and package/API names verified? 11 finding(s).
Are wrappers, guards, and repeated structures necessary? 160 finding(s).
Which changes need focused human review? 396 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 396 distinct pattern matches across 18 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 |
|---|---|---|---|---|
| MEDIUM | .ci/docker-compose-file/dex/haproxy.cfg | 1 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/dex/haproxy.cfg | 3 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/dex/haproxy.cfg | 17 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/dex/haproxy.cfg | 19 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/dex/haproxy.cfg | 36 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/dex/haproxy.cfg | 38 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 1 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 3 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 17 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 19 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 30 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 32 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 45 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 47 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 80 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 82 | ##---------------------------------------------------------------- | COMMENT |
| MEDIUM | plugins/emqx_agent/demo_builder_init.py | 69 | # ── HTTP helpers ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/demo_builder_init.py | 117 | # ── Cleanup ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/demo_builder_init.py | 151 | # ── Connections ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/demo_builder_init.py | 176 | # ── AI providers ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/demo_builder_init.py | 195 | # ── Tools ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/demo_builder_init.py | 225 | # ── Builder prompt ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/demo_builder_init.py | 451 | # ── Pipeline ─────────────────────────────────────────────────────────────────── | STRING |
| MEDIUM | plugins/emqx_agent/demo_builder_init.py | 497 | # ── Database setup ──────────────────────────────────────────────────────────── | STRING |
| MEDIUM | plugins/emqx_agent/demo_builder_init.py | 535 | # ── Main ─────────────────────────────────────────────────────────────────────── | STRING |
| MEDIUM | plugins/emqx_agent/demo_apple_box_init.py | 105 | # ── HTTP helpers ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/demo_apple_box_init.py | 162 | # ── Database setup ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/demo_apple_box_init.py | 217 | # ── Tools ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/priv/builder.html | 361 | // ── Connection ────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/priv/builder.html | 420 | // ── Sending ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/priv/builder.html | 445 | // ── Rendering ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_agent/priv/builder.html | 535 | // ── Misc ───────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 80 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 82 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 96 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 98 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 140 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 142 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 170 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 172 | ## ================================================================ | COMMENT |
| MEDIUM⚡ | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 186 | ## ================================================================ | COMMENT |
| MEDIUM⚡ | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 188 | ## ================================================================ | COMMENT |
| MEDIUM⚡ | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 193 | ## ================================================================ | COMMENT |
| MEDIUM⚡ | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 195 | ## ================================================================ | COMMENT |
| MEDIUM⚡ | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 200 | ## ================================================================ | COMMENT |
| MEDIUM⚡ | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 202 | ## ================================================================ | COMMENT |
| MEDIUM⚡ | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 210 | ## ================================================================ | COMMENT |
| MEDIUM⚡ | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 212 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 231 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 233 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 102 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 104 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 116 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 118 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 161 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 163 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 182 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 184 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 196 | ## ================================================================ | COMMENT |
| MEDIUM | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 198 | ## ================================================================ | COMMENT |
| 12 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .ci/docker-compose-file/docker-compose-keycloak.yaml | 1 | # Keycloak IDP for SAML SSO integration tests | COMMENT |
| LOW | .ci/docker-compose-file/docker-compose-doris-tls.yaml | 1 | ## N.B. | COMMENT |
| LOW | .ci/docker-compose-file/docker-compose-otel.yaml | 21 | command: ["--config=/otel-share/otel-collector-config.yaml", "${OTELCOL_ARGS}"] | COMMENT |
| LOW | .ci/docker-compose-file/docker-compose-otel.yaml | 61 | # emqx_bridge: | COMMENT |
| LOW | .ci/docker-compose-file/docker-compose-dameng.yaml | 1 | services: | COMMENT |
| LOW | .ci/docker-compose-file/docker-compose-influxdb-v3.yaml | 61 | # - subnet: 172.100.239.0/24 | COMMENT |
| LOW | …i/docker-compose-file/docker-compose-influxdb-tls.yaml | 21 | - "./influxdb/setup-v1.sh:/docker-entrypoint-initdb.d/setup-v1.sh" | COMMENT |
| LOW | .ci/docker-compose-file/docker-compose-iceberg.yaml | 1 | ## https://github.com/databricks/docker-spark-iceberg/blob/60754a31cbb2cea7eead2a16702f5c536a8e07ce/docker-compose.yml | COMMENT |
| LOW | .ci/docker-compose-file/docker-compose-iceberg.yaml | 21 | services: | COMMENT |
| LOW | …i/docker-compose-file/docker-compose-influxdb-tcp.yaml | 21 | networks: | COMMENT |
| LOW | .ci/docker-compose-file/docker-compose-quasardb.yaml | 21 | # docker run -it --rm --network emqx_bridge --name qdbsh bureau14/qdbsh --cluster qdb://172.100.239.30:2836 | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 1 | # Cassandra storage config YAML | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 21 | # on subsequent starts, this setting will apply even if initial token is set. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 41 | # that do not have vnodes enabled. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 61 | # are two nodes in the cluster, each delivery thread will use the maximum | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 81 | COMMENT | |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 101 | # Please increase system_auth keyspace replication factor if you use this authenticator. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 121 | # - CassandraRoleManager stores role data in the system_auth keyspace. Please | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 141 | # Validity period for permissions cache (fetching permissions can be an | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 161 | # underlying table, it may not bring a significant reduction in the | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 181 | # compatibility include RandomPartitioner, ByteOrderedPartitioner, and | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 201 | cdc_enabled: false | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 221 | # can still be inspected via JMX, kill the JVM for errors during startup. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 241 | # stop_commit | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 261 | # Do only change the default value, if you really have more prepared statements than | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 281 | # time it saves, so it's worthwhile to use it at large numbers. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 301 | COMMENT | |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 321 | # headroom for OS block level cache. Do never allow your system to swap. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 341 | # | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 361 | COMMENT | |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 381 | # | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 401 | # NOTE: If max_mutation_size_in_kb is set explicitly then commitlog_segment_size_in_mb must | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 421 | - class_name: org.apache.cassandra.locator.SimpleSeedProvider | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 441 | COMMENT | |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 461 | COMMENT | |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 481 | # mean larger flushes and hence less compaction, but also less concurrent | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 501 | # Total space to use for commit logs on disk. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 521 | # | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 541 | # Total space to use for change-data-capture logs on disk. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 561 | # more than this amount of memory. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 581 | COMMENT | |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 601 | # Set listen_address OR listen_interface, not both. Interfaces must correspond | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 621 | # listen_on_broadcast_address: false | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 641 | native_transport_port_ssl: 9142 | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 661 | # Whether to start the thrift rpc server. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 681 | COMMENT | |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 701 | # | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 721 | COMMENT | |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 741 | # and when not setting it it is defined by net.ipv4.tcp_wmem | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 761 | # responsibility. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 781 | # and looking up rows withing the partition by collation column | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 801 | # during a single long running compactions. The default is usually | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 821 | # When compacting, the replacement sstable(s) can be opened before they | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 841 | # How long the coordinator should wait for read operations to complete | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 861 | # can be identified. Set this value to zero to disable slow query logging. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 881 | COMMENT | |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 901 | # if you need to add another datacenter are GossipingPropertyFileSnitch | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 921 | # PropertyFileSnitch: | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 941 | # Proximity is determined by rack and data center, which are | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 961 | # expressed as a double which represents a percentage. Thus, a value of | COMMENT |
| 103 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plugins/emqx_unsgov/priv/ui.html | 1560 | function flattenTreeFiltersFromChildren(children, prefix, out) { | CODE |
| LOW | plugins/emqx_agent/demo_apple_box_init.py | 152 | def deactivate_pipeline_maybe(pid: str) -> None: | CODE |
| LOW | plugins/emqx_agent/priv/ui/tools.js | 158 | export function defaultPublishInputSchema() { | CODE |
| LOW | scripts/test/test_emqx_boot.py | 108 | def test_profile_defaults_to_enterprise(): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 115 | def test_emqx_boot_with_invalid_node_name(emqx_bin_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 133 | def test_hardened_rejects_insecure_cookie(emqx_bin_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 149 | def test_security_profile_defaults_to_hardened(emqx_bin_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 171 | def test_node_cookie_from_file(emqx_bin_path, tmp_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 194 | def test_node_cookie_from_missing_file_fails_fast(emqx_bin_path, tmp_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 205 | def test_node_cookie_from_empty_file_fails_fast(emqx_bin_path, tmp_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 218 | def test_node_cookie_from_fifo_read_once(emqx_bin_path, tmp_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 281 | def test_invalid_security_profile_fails_fast(emqx_bin_path, security_profile): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 300 | def test_invalid_default_listener_address_fails_fast(emqx_bin_path, default_address): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 318 | def test_unresolvable_default_listener_address_fails_boot(emqx_bin_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 337 | def test_valid_default_listener_address_accepted(emqx_bin_path, default_address): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 366 | def test_shipped_env_file_sets_nothing(env_file): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 377 | def test_env_file_sets_security_profile(emqx_bin_path, env_file): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 390 | def test_env_file_overrides_environment(emqx_bin_path, env_file): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 405 | def test_env_file_invalid_security_profile_fails_fast(emqx_bin_path, env_file): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 446 | def test_dist_tls_without_verification_warns_and_boots( | CODE |
| LOW | scripts/test/test_emqx_boot.py | 468 | def assert_warns_on_unverified_dist_tls(result): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 485 | def test_hardened_profile_warns_about_half_migrated_dist_tls( | CODE |
| LOW | scripts/test/test_emqx_boot.py | 511 | def test_hardened_profile_warns_about_empty_dist_tls_optfile(emqx_bin_path, env_file, tmp_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 535 | def test_duplicate_verify_last_wins_is_not_reported( | CODE |
| LOW | scripts/test/test_emqx_boot.py | 572 | def test_legacy_profile_warns_about_unverified_dist_tls( | CODE |
| LOW | scripts/test/test_emqx_boot.py | 591 | def test_verified_dist_tls_starts_under_hardened_profile(emqx_bin_path, env_file, dist_tls_certs): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 616 | def test_rendered_ssl_dist_conf_verifies_peers(emqx_rel_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 637 | def test_corrupted_cluster_override_conf(emqx_bin_path, emqx_rel_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 689 | def test_corrupted_cluster_hocon(emqx_bin_path, emqx_rel_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 724 | def test_corrupted_base_hocon(emqx_bin_path, emqx_rel_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 892 | def test_acl_file_read_permission_failure(emqx_bin_path, emqx_rel_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 913 | def test_acl_file_corrupted_content(emqx_bin_path, emqx_rel_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 963 | def test_feature_gate_essential(emqx_bin_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 1046 | def test_feature_gate_custom_multiple(emqx_bin_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 1077 | def test_feature_gate_bad_preset(emqx_bin_path): | CODE |
| LOW | scripts/test/test_emqx_boot.py | 1102 | def test_feature_gate_bad_feature(emqx_bin_path): | CODE |
| LOW | scripts/test/test_verify_docker_attestations.py | 76 | def test_preserved_nested_index(self): | CODE |
| LOW | scripts/test/test_verify_docker_attestations.py | 88 | def test_rejects_lost_or_mismatched_attestations(self): | CODE |
| LOW | scripts/test/test_verify_docker_attestations.py | 107 | def test_rejects_wrong_architecture(self): | CODE |
| LOW | scripts/test/test_verify_docker_attestations.py | 114 | def test_public_debian_pr_image(self): | CODE |
| LOW | scripts/test/test_find_apps.py | 261 | def test_change_app_used_by_others(project_root: Path, original_head: str): | CODE |
| LOW | scripts/test/test_find_apps.py | 285 | def test_change_app_used_by_all(project_root: Path, original_head: str): | CODE |
| LOW | scripts/test/test_find_apps.py | 311 | def test_change_app_used_by_none(project_root: Path, original_head: str): | CODE |
| LOW | scripts/test/test_find_apps.py | 331 | def test_change_multiple_apps(project_root: Path, original_head: str): | CODE |
| LOW | scripts/test/test_find_apps.py | 353 | def test_change_docker_plugin(project_root: Path, original_head: str): | CODE |
| LOW | scripts/test/test_find_apps.py | 448 | def test_change_github_directory(project_root: Path, original_head: str): | CODE |
| LOW | scripts/test/test_docker_entrypoint.py | 14 | def run_entrypoint_with_hostname(tmp_path, hostname_script, extra_env=None): | CODE |
| LOW | scripts/test/test_docker_entrypoint.py | 48 | def test_entrypoint_falls_back_to_interface_ip_when_hostname_resolution_fails(tmp_path): | CODE |
| LOW | scripts/test/test_docker_entrypoint.py | 69 | def test_entrypoint_fails_when_node_host_cannot_be_determined(tmp_path): | CODE |
| LOW | scripts/test/test_cluster_join.py | 21 | def test_successful_join_does_not_retry(): | CODE |
| LOW | scripts/test/test_cluster_join.py | 28 | def test_expected_rejection_captures_stderr_without_retrying(): | CODE |
| LOW | scripts/test/test_cluster_join.py | 44 | def test_successful_command_fails_negative_test(scenario, output): | CODE |
| LOW | scripts/test/test_cluster_join.py | 62 | def test_other_errors_do_not_pass_negative_test(scenario, output): | CODE |
| LOW | scripts/test/test_cluster_join.py | 73 | def test_positive_test_retries_boot_failure(): | CODE |
| LOW | scripts/test/test_cluster_join.py | 80 | def test_negative_test_retries_boot_failure(): | CODE |
| LOW | scripts/sbom/convert_cdx_to_spdx.py | 84 | def generate_spdx_id_from_bom_ref(bom_ref: str, component: Dict[str, Any] = None, spdx_id_prefix: str = "SPDXRef-") -> s | CODE |
| LOW | scripts/sbom/convert_cdx_to_spdx.py | 107 | def convert_component_to_spdx_package(component: Dict[str, Any], spdx_id_prefix: str = "SPDXRef-") -> Dict[str, Any]: | CODE |
| LOW | scripts/sbom/convert_cdx_to_spdx.py | 198 | def convert_cyclonedx_to_spdx(cdx_path: Path, output_path: Path = None) -> Dict[str, Any]: | CODE |
| LOW | scripts/sbom/filter_and_enrich.py | 65 | def normalize_license_to_spdx(license_text: str) -> Optional[str]: | CODE |
| LOW | scripts/sbom/filter_and_enrich.py | 165 | def parse_app_file_for_license(package_dir: Path, package_name: str) -> Optional[str]: | CODE |
| 2 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | plugins/emqx_agent/demo_builder_init.py | 113 | except RuntimeError: | CODE |
| HIGH | plugins/emqx_agent/demo_apple_box_init.py | 148 | except RuntimeError: | CODE |
| HIGH | scripts/sca-hyg.py | 170 | except (OSError, IsADirectoryError): | CODE |
| HIGH | scripts/test/test_emqx_boot.py | 882 | except: | CODE |
| HIGH | scripts/test/test_find_apps.py | 34 | except Exception: | CODE |
| HIGH | scripts/test/test_find_apps.py | 137 | except Exception: | CODE |
| HIGH | scripts/test/test_find_apps.py | 32 | except OSError: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plugins/emqx_agent/demo_builder_init.py | 567 | except Exception as e: | STRING |
| LOW | plugins/emqx_agent/demo_teardown.py | 185 | except Exception as e: | CODE |
| LOW | plugins/emqx_agent/demo_teardown.py | 195 | except Exception as e: | CODE |
| LOW | plugins/emqx_agent/demo_apple_box_init.py | 428 | except Exception as e: | CODE |
| LOW | scripts/demo-lwm2m-blockwise-wakaama.sh | 435 | except Exception: | CODE |
| MEDIUM | scripts/demo-lwm2m-blockwise-wakaama.sh | 432 | def on_message(client, userdata, msg): | CODE |
| MEDIUM | scripts/find_apps.py | 204 | print("Error: --base-ref requires a value", file=sys.stderr) | CODE |
| LOW | scripts/test/test_find_apps.py | 34 | except Exception: | CODE |
| LOW | scripts/test/test_find_apps.py | 137 | except Exception: | CODE |
| LOW | scripts/test/test_find_apps.py | 159 | except Exception as e: | CODE |
| MEDIUM⚡ | scripts/sbom/convert_cdx_to_spdx.py | 305 | print(f"Error: Input file not found: {args.input}", file=sys.stderr) | CODE |
| LOW⚡ | scripts/sbom/convert_cdx_to_spdx.py | 315 | except Exception as e: | CODE |
| MEDIUM⚡ | scripts/sbom/convert_cdx_to_spdx.py | 316 | print(f"Error converting SBOM: {e}", file=sys.stderr) | CODE |
| LOW | scripts/sbom/filter_and_enrich.py | 207 | except Exception as e: | CODE |
| LOW | scripts/sbom/filter_and_enrich.py | 291 | except Exception as e: | CODE |
| MEDIUM | scripts/sbom/generate_text_report.py | 17 | print("Error: spdx-tools is not installed. Please install it with: pip install spdx-tools", file=sys.stderr) | CODE |
| MEDIUM⚡ | scripts/sbom/generate_text_report.py | 66 | print(f"Error: Input file not found: {args.input}", file=sys.stderr) | CODE |
| LOW⚡ | scripts/sbom/generate_text_report.py | 76 | except Exception as e: | CODE |
| MEDIUM⚡ | scripts/sbom/generate_text_report.py | 77 | print(f"Error: Failed to generate text report using spdx-tools: {e}", file=sys.stderr) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/check-api-scopes.sh | 34 | # Check if the file exports scopes/0 | COMMENT |
| LOW | scripts/find_apps.py | 55 | # Check if mix.exs at root is changed | COMMENT |
| LOW | scripts/find_apps.py | 59 | # Check if .github or .ci directories are changed | COMMENT |
| LOW | scripts/find-suites.sh | 33 | # Check if path prefix is present | COMMENT |
| LOW | scripts/find-suites.sh | 38 | # Check if suffix is present | COMMENT |
| LOW | scripts/test/test_emqx_boot.py | 668 | # Check if error message is in output before timeout | COMMENT |
| LOW | scripts/test/test_emqx_boot.py | 866 | # Check if error message is in output before timeout | COMMENT |
| LOW | scripts/test/emqx-smoke-test.sh | 39 | ## Check if EMQX is responding | COMMENT |
| LOW | scripts/sbom/convert_cdx_to_spdx.py | 52 | # Check if it's already a valid SPDX identifier (contains -) | COMMENT |
| LOW | scripts/sbom/convert_cdx_to_spdx.py | 59 | # Check if it looks like a valid SPDX ID (contains version number with dash) | COMMENT |
| LOW⚡ | scripts/sbom/generate_sbom.sh | 105 | # Check if converter script exists | COMMENT |
| LOW⚡ | scripts/sbom/generate_sbom.sh | 111 | # Check if filter script exists | COMMENT |
| LOW⚡ | scripts/sbom/generate_sbom.sh | 117 | # Check if report script exists | COMMENT |
| LOW | scripts/sbom/filter_and_enrich.py | 345 | # Check if package already has license | COMMENT |
| LOW | scripts/rel/cut.sh | 281 | ## Check if the Chart versions are in sync | COMMENT |
| LOW | scripts/rel/cut.sh | 284 | ## Check if app versions are bumped | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | changes/e5.4.0.en.md | 46 | - [#11766](https://github.com/emqx/emqx/pull/11766) Implemented a preliminary Role-Based Access Control for the REST API | CODE |
| HIGH | changes/v5.4.0.en.md | 46 | - [#11766](https://github.com/emqx/emqx/pull/11766) Implemented a preliminary Role-Based Access Control for the REST API | CODE |
| HIGH | changes/e5.3.1.en.md | 12 | - [#11565](https://github.com/emqx/emqx/pull/11565) Upgraded jq library from v0.3.10 to v0.3.11. In this version, jq_por | CODE |
| HIGH | changes/v5.3.1.en.md | 9 | - [#11565](https://github.com/emqx/emqx/pull/11565) Upgraded jq library from v0.3.10 to v0.3.11. In this version, jq_por | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .ci/docker-compose-file/clickhouse/config.xml | 341 | Regexps are not aligned: don't forget to add ^ and $. Also don't forget to escape dot (.) metacharacter | CODE |
| MEDIUM | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 38 | # initial_token allows you to specify tokens manually. While you can use it with | COMMENT |
| MEDIUM | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 650 | # you may want to adjust max_value_size_in_mb accordingly. This should be positive and less than 2048. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra_noauth.yaml | 870 | # Warning: before enabling this property make sure to ntp is installed | COMMENT |
| MEDIUM | .ci/docker-compose-file/cassandra/cassandra.yaml | 38 | # initial_token allows you to specify tokens manually. While you can use it with | COMMENT |
| MEDIUM | .ci/docker-compose-file/cassandra/cassandra.yaml | 650 | # you may want to adjust max_value_size_in_mb accordingly. This should be positive and less than 2048. | COMMENT |
| LOW | .ci/docker-compose-file/cassandra/cassandra.yaml | 870 | # Warning: before enabling this property make sure to ntp is installed | COMMENT |
| LOW | scripts/rel/cut.sh | 371 | logwarn "Don't forget to push the tag to emqx/emqx" | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/sca-hyg.py | 18 | CODE | |
| LOW | scripts/verify-docker-attestations.py | 16 | CODE | |
| LOW | scripts/find_apps.py | 42 | CODE | |
| LOW | scripts/find_apps.py | 75 | CODE | |
| LOW | scripts/find_apps.py | 158 | CODE | |
| LOW | scripts/find_apps.py | 181 | CODE | |
| LOW | scripts/rerun-apps-version-check.py | 70 | CODE | |
| LOW | scripts/test/test_verify_docker_attestations.py | 88 | CODE | |
| LOW | scripts/test/test_find_apps.py | 23 | CODE | |
| LOW | scripts/sbom/convert_cdx_to_spdx.py | 70 | CODE | |
| LOW | scripts/sbom/convert_cdx_to_spdx.py | 149 | CODE | |
| LOW | scripts/sbom/filter_and_enrich.py | 165 | CODE | |
| LOW | scripts/sbom/filter_and_enrich.py | 339 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | plugins/emqx_acme/smoke/pebble_smoke.sh | 26 | ## Usage: | COMMENT |
| LOW | plugins/emqx_acme/smoke/cluster/cluster_smoke.sh | 37 | ## Usage: | COMMENT |
| LOW | plugins/emqx_bridge_mqtt_dq/smoke/smoke_docker.sh | 9 | ## Usage: | COMMENT |
| LOW | plugins/emqx_bridge_mqtt_dq/smoke/smoke_bench.sh | 13 | ## Usage: | COMMENT |
| LOW | plugins/emqx_maptabs/smoke/cluster/cluster_smoke.sh | 37 | ## Usage: | COMMENT |
| LOW | scripts/sca-pkg.sh | 9 | ## Usage: | COMMENT |
| LOW | scripts/publish-docker-multi-arch.sh | 6 | ## Usage: | COMMENT |
| LOW | scripts/sbom/generate_sbom.sh | 13 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .ci/docker-compose-file/iceberg/query/server.py | 1 | CODE | |
| LOW | scripts/find_apps.py | 14 | CODE | |
| LOW | scripts/find_apps.py | 16 | CODE | |
| LOW | scripts/rerun-apps-version-check.py | 7 | CODE | |
| LOW | scripts/rerun-apps-version-check.py | 11 | CODE | |
| LOW | scripts/rerun-apps-version-check.py | 12 | CODE | |
| LOW | scripts/rerun-apps-version-check.py | 13 | CODE | |
| LOW | scripts/sbom/filter_and_enrich.py | 17 | CODE | |
| LOW | scripts/sbom/filter_and_enrich.py | 21 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/sbom/generate_sbom.sh | 123 | # Step 1: Generate CycloneDX SBOM | COMMENT |
| LOW | scripts/sbom/generate_sbom.sh | 142 | # Step 2: Convert CycloneDX to SPDX | COMMENT |
| LOW | scripts/sbom/generate_sbom.sh | 161 | # Step 3: Filter SPDX SBOM | COMMENT |
| LOW | scripts/sbom/generate_sbom.sh | 184 | # Step 4: Generate text report | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/sbom/generate_sbom.sh | 123 | # Step 1: Generate CycloneDX SBOM | COMMENT |
| LOW | scripts/sbom/generate_sbom.sh | 142 | # Step 2: Convert CycloneDX to SPDX | COMMENT |
| LOW | scripts/sbom/generate_sbom.sh | 161 | # Step 3: Filter SPDX SBOM | COMMENT |
| LOW | scripts/sbom/generate_sbom.sh | 184 | # Step 4: Generate text report | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .ci/docker-compose-file/haproxy/haproxy.cfg | 65 | # Create a stick table for session persistence | COMMENT |
| MEDIUM | scripts/gen-elp-build-info.sh | 24 | # This function contains the original, working logic for processing an app directory. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | scripts/sbom/generate_text_report.py | 22 | Generate human-readable text report from SPDX SBOM using spdx-tools. Args: sbom_path: Path to SPDX JSON | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | plugins/emqx_maptabs/smoke/cluster/cluster_smoke.sh | 249 | ## mria replication to the peer and the peer's event-driven cache | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .ci/docker-compose-file/dex/config.dev.yaml | 44 | - email: "admin@example.com" | CODE |
| LOW | .ci/docker-compose-file/keycloak/realm-export.json | 25 | "email": "admin@example.com", | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/find_apps.py | 112 | # App not found in deps.txt, just add the changed app itself | COMMENT |