Ministack: Free, open-source local AWS emulator - 60+ services, Terraform compatible, real databases. Free forever. MIT licensed.
This report presents the forensic synthetic code analysis of ministackorg/ministack, a Python project with 4,170 GitHub stars. SynthScan v2.0 examined 327,830 lines of code across 234 source files, recording 9756 pattern matches distributed across 19 syntactic categories. The overall adjusted score of 39.6 places this repository in the Strong 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).
Longitudinal tracking requires multiple scan runs. Once this repository is re-scanned after new commits land, this chart will visualise how the synthetic code signal evolves over time — enabling you to detect whether AI authorship is growing, stabilising, or being actively corrected by human engineers.
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 9756 distinct pattern matches across 19 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 |
|---|---|---|---|---|
| MEDIUM⚡ | ministack/app.py | 1091 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | ministack/app.py | 1093 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | ministack/app.py | 1882 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | ministack/app.py | 1884 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/app.py | 176 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/app.py | 179 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/app.py | 650 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/app.py | 652 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/app.py | 1180 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/app.py | 1182 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/app.py | 1702 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/app.py | 1704 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/app.py | 2001 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/app.py | 2003 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/app.py | 2148 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/app.py | 2150 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/app.py | 487 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | ministack/app.py | 489 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | ministack/core/iam_evaluator.py | 512 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | ministack/core/iam_evaluator.py | 514 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/iam_evaluator.py | 23 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/iam_evaluator.py | 25 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/iam_evaluator.py | 79 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/iam_evaluator.py | 81 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/iam_evaluator.py | 107 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/iam_evaluator.py | 109 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/iam_evaluator.py | 129 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/iam_evaluator.py | 131 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/iam_evaluator.py | 380 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/iam_evaluator.py | 382 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/iam_evaluator.py | 467 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/iam_evaluator.py | 469 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/iam_evaluator.py | 682 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/iam_evaluator.py | 684 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/iam_evaluator.py | 738 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/iam_evaluator.py | 740 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/iam_evaluator.py | 775 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/iam_evaluator.py | 777 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | ministack/core/lambda_runtime.py | 653 | // ── require() intercept ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | ministack/core/lambda_runtime.py | 91 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/lambda_runtime.py | 93 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/lambda_runtime.py | 276 | // ── Lambda stub (REST-based, not JSON-RPC) ───────────────────────────── | COMMENT |
| MEDIUM | ministack/core/lambda_runtime.py | 337 | // ── OpenSearch stub (REST-JSON, not JSON-RPC) ───────────────────────── | COMMENT |
| MEDIUM⚡ | ministack/core/lambda_runtime.py | 237 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | ministack/core/lambda_runtime.py | 239 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | ministack/core/lambda_runtime.py | 146 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM | ministack/core/lambda_runtime.py | 148 | # --------------------------------------------------------------------------- | STRING |
| MEDIUM⚡ | ministack/core/pgproxy.py | 2000 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | ministack/core/pgproxy.py | 2002 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/pgproxy.py | 50 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/pgproxy.py | 52 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/pgproxy.py | 130 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/pgproxy.py | 132 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/pgproxy.py | 183 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/pgproxy.py | 191 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/pgproxy.py | 378 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/pgproxy.py | 380 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/pgproxy.py | 1226 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/pgproxy.py | 1228 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | ministack/core/pgproxy.py | 1740 | # --------------------------------------------------------------------------- | COMMENT |
| 2423 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | CONTRIBUTING.md | 149 | def test_myservice_operation_one(mysvc): | CODE |
| LOW⚡ | ministack/app.py | 1096 | async def _handle_cognito_body_request(method: str, path: str, headers: dict, body: bytes, query_params: dict): | CODE |
| LOW | ministack/app.py | 70 | def _ws_resolve_iot_account_id(scope: dict, ws_headers: dict) -> str: | CODE |
| LOW | ministack/app.py | 243 | def call_service_handler_sync(handler, method, path, headers, body, query_params, | CODE |
| LOW | ministack/app.py | 711 | def _handle_unknown_localstack_request(path: str, request_id: str): | CODE |
| LOW | ministack/app.py | 738 | def _handle_lambda_download_request(path: str, method: str): | CODE |
| LOW | ministack/app.py | 765 | async def _handle_cognito_get_request(method: str, path: str, headers: dict, query_params: dict): | CODE |
| LOW | ministack/app.py | 812 | async def _handle_ses_messages_request(method: str, path: str, headers: dict, query_params: dict): | CODE |
| LOW | ministack/app.py | 883 | async def _handle_sqs_messages_request(method: str, path: str, headers: dict, query_params: dict): | CODE |
| LOW | ministack/app.py | 1066 | def _handle_transfer_sftp_ports_request(method: str, path: str): | CODE |
| LOW | ministack/app.py | 1107 | async def _handle_admin_config_request(path: str, method: str, body: bytes): | CODE |
| LOW | ministack/app.py | 1157 | async def _handle_post_body_shortcuts(method: str, path: str, headers: dict, body: bytes, query_params: dict, request_id | CODE |
| LOW | ministack/app.py | 1309 | async def _handle_ecr_registry_request(method: str, path: str, headers: dict, body: bytes, query_params: dict): | CODE |
| LOW | ministack/app.py | 1399 | def _resolve_custom_domain_request(host: str, path: str): | CODE |
| LOW | ministack/app.py | 1416 | async def _handle_execute_api_request( | CODE |
| LOW | ministack/app.py | 1474 | def _is_potential_alb_request(host: str, path: str) -> bool: | CODE |
| LOW | ministack/app.py | 1507 | async def _handle_lambda_url_request( | CODE |
| LOW | ministack/app.py | 1665 | async def _handle_special_data_plane_request( | CODE |
| LOW | ministack/app.py | 1927 | async def _dispatch_service_request( | CODE |
| LOW | ministack/app.py | 2344 | def _build_persistence_save_dict(): | CODE |
| LOW | ministack/core/responses.py | 341 | def _best_effort_region_from_arnish(value): | CODE |
| LOW⚡ | ministack/core/iam_evaluator.py | 516 | def _role_name_from_assumed_arn(assumed_arn: str) -> str: | CODE |
| LOW | ministack/core/iam_evaluator.py | 170 | def _op_string_equals_ignore_case(actual: str, expected: str) -> bool: | CODE |
| LOW | ministack/core/iam_evaluator.py | 174 | def _op_string_not_equals_ignore_case(actual: str, expected: str) -> bool: | CODE |
| LOW | ministack/core/iam_evaluator.py | 300 | def _evaluate_single_condition(operator: str, actual: Any, | CODE |
| LOW | ministack/core/iam_evaluator.py | 581 | def _resolve_managed_policy_document(policy_arn: str, | CODE |
| LOW | ministack/core/lambda_runtime.py | 55 | def _lambda_function_account_region_from_arn(arn: str) -> tuple[str, str]: | CODE |
| LOW | ministack/core/lambda_runtime.py | 69 | def _account_region_from_function_config(config: dict) -> tuple[str, str]: | CODE |
| LOW | ministack/core/iam_actions.py | 579 | def _kms_key_id_from_ciphertext(ciphertext_b64: str) -> str: | CODE |
| LOW | ministack/services/cloudtrail.py | 221 | def _invalid_home_region_error(name: str, home_region: str): | CODE |
| LOW | ministack/services/cloudtrail.py | 413 | def _is_non_aws_trail_arn_partition(raw: str) -> bool: | CODE |
| LOW⚡ | ministack/services/mediaconnect.py | 296 | def _describe_flow_source_metadata(arn): | CODE |
| LOW⚡ | ministack/services/mediaconnect.py | 303 | def _describe_flow_source_thumbnail(arn): | CODE |
| LOW | ministack/services/lambda_microvms.py | 238 | def _create_microvm_auth_token(microvm_id, body): | CODE |
| LOW⚡ | ministack/services/lambda_microvms.py | 249 | def _create_microvm_shell_auth_token(microvm_id, body): | CODE |
| LOW⚡ | ministack/services/rds.py | 933 | def _legacy_scoped_rds_docker_volume_name(db_id, account_id=None, region=None): | CODE |
| LOW⚡ | ministack/services/rds.py | 941 | def _rds_cluster_docker_volume_name(cluster_id, account_id=None, region=None): | CODE |
| LOW⚡ | ministack/services/rds.py | 2235 | def _mysql_gtid_history_ready(cluster): | CODE |
| LOW⚡ | ministack/services/rds.py | 2242 | def _mysql_replication_server_id(account_id, region, cluster_id): | CODE |
| LOW⚡ | ministack/services/rds.py | 2248 | def _global_cluster_member_for_cluster(cluster): | CODE |
| LOW⚡ | ministack/services/rds.py | 2266 | def _mysql_replication_secondary(cluster): | CODE |
| LOW⚡ | ministack/services/rds.py | 2273 | def _resolve_global_member_cluster(member): | CODE |
| LOW⚡ | ministack/services/rds.py | 2283 | def _global_cluster_writer_cluster(global_cluster): | CODE |
| LOW⚡ | ministack/services/rds.py | 2998 | def _json_key_to_query_param_name(key: str) -> str: | CODE |
| LOW⚡ | ministack/services/rds.py | 3225 | def _invalid_db_instance_identifier_error(identifier, parameter_name="DBInstanceIdentifier"): | CODE |
| LOW⚡ | ministack/services/rds.py | 3235 | def _invalid_cluster_identifier_error(identifier): | CODE |
| LOW⚡ | ministack/services/rds.py | 3245 | def _resource_not_found_error_for_arn(identifier): | CODE |
| LOW⚡ | ministack/services/rds.py | 3299 | def _refresh_global_cluster_readers(global_cluster): | CODE |
| LOW⚡ | ministack/services/rds.py | 3306 | def _set_global_cluster_writer(global_cluster, target_member): | CODE |
| LOW⚡ | ministack/services/rds.py | 3312 | def _attach_cluster_to_global(global_cluster, cluster, is_writer): | CODE |
| LOW⚡ | ministack/services/rds.py | 3448 | def _unregister_instance_from_clusters(db_id): | CODE |
| LOW⚡ | ministack/services/rds.py | 4944 | def _apply_cluster_master_password_change(cluster, new_pass): | CODE |
| LOW⚡ | ministack/services/rds.py | 5104 | def _create_snapshot_internal(snap_id, instance): | CODE |
| LOW⚡ | ministack/services/rds.py | 5218 | def _resolve_subnet_group_members(subnet_ids): | CODE |
| LOW⚡ | ministack/services/rds.py | 5431 | def _create_db_cluster_param_group(p): | CODE |
| LOW⚡ | ministack/services/rds.py | 5558 | def _create_db_cluster_snapshot(p): | CODE |
| LOW⚡ | ministack/services/rds.py | 5693 | def _cluster_member_instances(cluster): | CODE |
| LOW⚡ | ministack/services/rds.py | 6281 | def _describe_option_group_options(p): | CODE |
| LOW⚡ | ministack/services/rds.py | 6290 | def _describe_pending_maintenance_actions(p): | CODE |
| LOW⚡ | ministack/services/rds.py | 6299 | def _tag_resource_scope_error(arn): | CODE |
| 5473 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | ministack/app.py | 1086 | except Exception as e: | CODE |
| LOW⚡ | ministack/app.py | 1878 | except Exception: | CODE |
| LOW⚡ | ministack/app.py | 2251 | except Exception as e: | CODE |
| LOW⚡ | ministack/app.py | 2260 | except Exception as e: | CODE |
| LOW⚡ | ministack/app.py | 2268 | except Exception as e: | CODE |
| LOW⚡ | ministack/app.py | 2274 | except Exception as e: | CODE |
| LOW | ministack/app.py | 36 | except Exception: | CODE |
| LOW | ministack/app.py | 626 | except Exception: | CODE |
| LOW | ministack/app.py | 630 | except Exception: | CODE |
| LOW | ministack/app.py | 851 | except Exception: | CODE |
| LOW | ministack/app.py | 876 | except Exception as e: | CODE |
| LOW | ministack/app.py | 933 | except Exception: | CODE |
| LOW | ministack/app.py | 976 | except Exception as e: | CODE |
| LOW | ministack/app.py | 1050 | except Exception as e: | CODE |
| LOW | ministack/app.py | 1243 | except Exception as e: | CODE |
| LOW | ministack/app.py | 1469 | except Exception as e: | CODE |
| LOW | ministack/app.py | 1525 | except Exception as e: | CODE |
| LOW | ministack/app.py | 1559 | except Exception as e: | CODE |
| LOW | ministack/app.py | 1612 | except Exception as e: | CODE |
| LOW | ministack/app.py | 1678 | except Exception as e: | CODE |
| LOW | ministack/app.py | 1775 | except Exception: | CODE |
| LOW | ministack/app.py | 1817 | except Exception: | CODE |
| LOW | ministack/app.py | 1824 | except Exception: | CODE |
| LOW | ministack/app.py | 1911 | except Exception: | CODE |
| LOW | ministack/app.py | 1977 | except Exception as e: | CODE |
| LOW | ministack/app.py | 2062 | except Exception: | CODE |
| LOW | ministack/app.py | 2066 | except Exception: | CODE |
| LOW | ministack/app.py | 2230 | except Exception as e: | CODE |
| LOW | ministack/app.py | 2292 | except Exception as e: | CODE |
| LOW | ministack/app.py | 2298 | except Exception as e: | CODE |
| LOW | ministack/app.py | 2321 | except Exception: | CODE |
| LOW | ministack/app.py | 2527 | except Exception as e: | CODE |
| LOW | ministack/app.py | 2583 | except Exception as e: | CODE |
| LOW | ministack/app.py | 2616 | except Exception as e: | CODE |
| LOW | ministack/app.py | 2628 | except Exception as e: | CODE |
| LOW | ministack/app.py | 2640 | except Exception as e: | CODE |
| LOW | ministack/core/persistence.py | 164 | except Exception as e: | CODE |
| LOW | ministack/core/persistence.py | 204 | except Exception as e: | CODE |
| MEDIUM | ministack/core/lambda_runtime.py | 1231 | def _read_response(): | CODE |
| LOW⚡ | ministack/core/lambda_runtime.py | 230 | except Exception as e: | CODE |
| LOW | ministack/core/lambda_runtime.py | 188 | except Exception as e: | CODE |
| LOW | ministack/core/lambda_runtime.py | 964 | except Exception: | STRING |
| LOW | ministack/core/lambda_runtime.py | 1022 | except Exception as e: | STRING |
| LOW | ministack/core/lambda_runtime.py | 1147 | except Exception: | STRING |
| LOW | ministack/core/lambda_runtime.py | 1252 | except Exception as e: | STRING |
| LOW | ministack/core/lambda_runtime.py | 1307 | except Exception: | STRING |
| LOW | ministack/core/lambda_runtime.py | 1330 | except Exception: | STRING |
| LOW | ministack/core/lambda_runtime.py | 1334 | except Exception: | STRING |
| LOW | ministack/core/lambda_runtime.py | 1360 | except Exception: | STRING |
| LOW | ministack/core/concurrency.py | 150 | except Exception as e: # noqa: BLE001 — delivered to the awaiter | CODE |
| LOW | ministack/core/concurrency.py | 179 | except Exception: | CODE |
| LOW | ministack/core/concurrency.py | 186 | except Exception: | CODE |
| LOW | ministack/core/concurrency.py | 203 | except Exception: | CODE |
| MEDIUM | ministack/core/concurrency.py | 140 | def _post(result, exc): | CODE |
| MEDIUM | ministack/core/concurrency.py | 200 | def _run(): | CODE |
| MEDIUM | ministack/core/pgproxy.py | 1783 | def _ext_parse(conn, payload, b_writer, c_writer): | CODE |
| LOW⚡ | ministack/core/pgproxy.py | 1987 | except Exception: | CODE |
| LOW⚡ | ministack/core/pgproxy.py | 1996 | except Exception: | CODE |
| LOW | ministack/core/pgproxy.py | 1272 | except Exception as e: | CODE |
| LOW | ministack/core/pgproxy.py | 1295 | except Exception: | CODE |
| 843 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | ministack/core/lambda_runtime.py | 909 | // If handler accepts callback (arity >= 3) or returned undefined, | COMMENT |
| HIGH⚡ | ministack/core/lambda_runtime.py | 447 | res.on("data", (c) => chunks.push(c)); | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 453 | const type = parsed.__type || parsed.Code || "OpenSearchServiceError"; | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 456 | parsed.Message || parsed.message || text || "OpenSearch service error" | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 580 | res.on("data", (c) => chunks.push(c)); | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 587 | parsed.Message || parsed.message || text || "Service error" | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 590 | err.code = parsed.__type || parsed.Code || "ServiceError"; | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 641 | if (typeof prop !== "string") return undefined; | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 647 | return undefined; | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 708 | region: process.env.AWS_REGION || process.env.FBT_AWS_REGION || "us-east-1", | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 715 | if (req.endpoint && req.endpoint.protocol === "http:") { | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 716 | if (opts && opts.agent instanceof https.Agent) { | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 728 | else if (options instanceof url.URL) options = url.parse(options.toString()); | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 731 | const host = options.hostname || options.host || ""; | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 740 | } else if (options.agent === undefined) { | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 753 | options.port = options.port || msPort; | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 761 | var esHost = process.env.ES_ENDPOINT ? process.env.ES_ENDPOINT.split(":")[0] : null; | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 762 | if (esHost && (host === esHost || host.startsWith(esHost + ":"))) { | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 798 | process.env.AWS_LAMBDA_FUNCTION_NAME = msg.function_name || process.env.AWS_LAMBDA_FUNCTION_NAME || ""; | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 799 | process.env.AWS_LAMBDA_FUNCTION_MEMORY_SIZE = String(msg.memory || process.env.AWS_LAMBDA_FUNCTION_MEMORY_SIZE || | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 800 | process.env._LAMBDA_FUNCTION_ARN = msg.arn || process.env._LAMBDA_FUNCTION_ARN || ""; | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 890 | status: "error", error: String(err.message || err), trace: err.stack || "" | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 898 | context.succeed = (res) => settle(null, res); | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 899 | context.fail = (err) => settle(err || new Error("fail")); | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 902 | if (result && typeof result.then === "function") { | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 904 | result.then(res => settle(null, res), err => settle(err)); | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 905 | } else if (handlerFn.length < 3 && result !== undefined) { | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 905 | } else if (handlerFn.length < 3 && result !== undefined) { | CODE |
| HIGH⚡ | ministack/core/lambda_runtime.py | 907 | settle(null, result); | CODE |
| HIGH | ministack/core/lambda_runtime.py | 260 | return fd === 1 || fd === _stdoutFd; | CODE |
| HIGH | ministack/core/lambda_runtime.py | 304 | res.on("data", (c) => chunks.push(c)); | CODE |
| HIGH | ministack/core/lambda_runtime.py | 389 | if (input.MaxResults !== undefined) query.set("maxResults", input.MaxResults); | CODE |
| HIGH | ministack/core/lambda_runtime.py | 391 | const suffix = query.toString(); | CODE |
| HIGH | ministack/core/lambda_runtime.py | 428 | const region = process.env.AWS_REGION || process.env.AWS_DEFAULT_REGION || "us-east-1"; | CODE |
| HIGH | ministack/core/lambda_runtime.py | 625 | if (typeof prop !== "string") return undefined; | CODE |
| HIGH | ministack/core/lambda_runtime.py | 783 | let handlerFn = null; | CODE |
| HIGH | ministack/core/lambda_runtime.py | 831 | handlerFn = mod[handlerName] || (mod.default && mod.default[handlerName]) || mod.default; | CODE |
| HIGH | ministack/core/lambda_runtime.py | 871 | if (event.__DEPTH_EVENT_KEY__ !== undefined) { | CODE |
| HIGH | ministack/services/dynamodb.py | 917 | ValidationException for null, empty, too-long, or pattern-violating | STRING |
| HIGH | ministack/services/sqs.py | 974 | # callers can ship `{"Tags": {"key": null}}`. Previously we stored the | COMMENT |
| HIGH | ministack/services/apigateway.py | 1577 | # but reject null, so a present-but-null key fails every request lacking | COMMENT |
| HIGH | ministack/services/cloudwatch.py | 1675 | encoding them as null, so a None must never reach cbor2.dumps(). Non-None | STRING |
| HIGH⚡ | ministack/services/lambda_svc.py | 810 | (reqErr.message && reqErr.message.includes("'" + fullPath + "'")) || | CODE |
| HIGH⚡ | ministack/services/lambda_svc.py | 811 | (resolvedPath && reqErr.message && reqErr.message.includes("'" + resolvedPath + "'")); | CODE |
| HIGH⚡ | ministack/services/lambda_svc.py | 812 | if (missingHandlerEntry && fs.existsSync(mjsPath)) { | CODE |
| HIGH⚡ | ministack/services/lambda_svc.py | 821 | const handler = mod[fnName] || (mod.default && mod.default[fnName]) || mod.default; | CODE |
| HIGH⚡ | ministack/services/lambda_svc.py | 829 | if (result !== undefined) process.stdout.write(JSON.stringify(result)); | CODE |
| HIGH⚡ | ministack/services/lambda_svc.py | 831 | process.stderr.write(String(err.stack || err)); | CODE |
| HIGH | ministack/services/lambda_svc.py | 7044 | # Real AWS omits these keys entirely rather than sending null; strict event | COMMENT |
| HIGH | tests/test_stepfunctions.py | 7910 | lands ABORTED with error/cause null, per the documented payloads.""" | STRING |
| HIGH | tests/test_sqs.py | 611 | HTTP callers can send `{"Tags": {"key": null}}`; previously the null was | STRING |
| HIGH | tests/test_lambda.py | 2026 | "exports.handler = (event, context, cb) => cb(null, { cb: true, val: event.y });" | CODE |
| HIGH | tests/test_lambda.py | 7447 | Options: body && JSON.parse(body).AccessPolicies, | CODE |
| HIGH | tests/test_lambda.py | 7612 | cb(null, {{ statusCode: res.statusCode }}); | CODE |
| HIGH | tests/test_lambda.py | 9776 | body: event.body ?? null, | CODE |
| HIGH⚡ | tests/test_cfn.py | 8500 | let physicalId = event.PhysicalResourceId || event.LogicalResourceId; | CODE |
| HIGH⚡ | tests/test_cfn.py | 8505 | physicalId = call.physicalResourceId?.id || physicalId; | CODE |
| HIGH⚡ | tests/test_cfn.py | 8514 | result.region = await client.config.region().catch(() => undefined); | CODE |
| HIGH⚡ | tests/test_cfn.py | 8520 | await respond(event, "FAILED", err.message || String(err), physicalId, {}); | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ministack/app.py | 765 | CODE | |
| LOW | ministack/app.py | 812 | CODE | |
| LOW | ministack/app.py | 883 | CODE | |
| LOW | ministack/app.py | 1107 | CODE | |
| LOW | ministack/app.py | 1185 | CODE | |
| LOW | ministack/app.py | 1760 | CODE | |
| LOW | ministack/app.py | 1927 | CODE | |
| LOW | ministack/app.py | 2006 | CODE | |
| LOW | ministack/app.py | 2153 | CODE | |
| LOW | ministack/app.py | 2587 | CODE | |
| LOW | ministack/core/responses.py | 341 | CODE | |
| LOW | ministack/core/responses.py | 386 | CODE | |
| LOW | ministack/core/responses.py | 310 | CODE | |
| LOW | ministack/core/iam_evaluator.py | 86 | CODE | |
| LOW | ministack/core/iam_evaluator.py | 361 | CODE | |
| LOW | ministack/core/iam_evaluator.py | 547 | CODE | |
| LOW | ministack/core/iam_evaluator.py | 822 | CODE | |
| LOW | ministack/core/lambda_runtime.py | 1414 | CODE | |
| LOW | ministack/core/lambda_runtime.py | 967 | CODE | |
| LOW | ministack/core/lambda_runtime.py | 1176 | CODE | |
| LOW | ministack/core/lambda_runtime.py | 1216 | CODE | |
| LOW | ministack/core/lambda_runtime.py | 1231 | CODE | |
| LOW | ministack/core/pgproxy.py | 196 | CODE | |
| LOW | ministack/core/pgproxy.py | 275 | CODE | |
| LOW | ministack/core/pgproxy.py | 339 | CODE | |
| LOW | ministack/core/pgproxy.py | 589 | CODE | |
| LOW | ministack/core/pgproxy.py | 733 | CODE | |
| LOW | ministack/core/pgproxy.py | 1025 | CODE | |
| LOW | ministack/core/pgproxy.py | 1278 | CODE | |
| LOW | ministack/core/pgproxy.py | 1335 | CODE | |
| LOW | ministack/core/pgproxy.py | 1618 | CODE | |
| LOW | ministack/core/pgproxy.py | 1917 | CODE | |
| LOW | ministack/core/pgproxy.py | 1942 | CODE | |
| LOW | ministack/core/pgproxy.py | 467 | CODE | |
| LOW | ministack/core/iam_actions.py | 173 | CODE | |
| LOW | ministack/core/iam_actions.py | 281 | CODE | |
| LOW | ministack/core/iam_actions.py | 397 | CODE | |
| LOW | ministack/core/iam_actions.py | 599 | CODE | |
| LOW | ministack/core/container_reaper.py | 110 | CODE | |
| LOW | ministack/core/router.py | 474 | CODE | |
| LOW | ministack/services/cloudtrail.py | 148 | CODE | |
| LOW | ministack/services/sts.py | 58 | CODE | |
| LOW | ministack/services/lambda_microvms.py | 300 | CODE | |
| LOW | ministack/services/dsql.py | 773 | CODE | |
| LOW | ministack/services/dsql.py | 901 | CODE | |
| LOW | ministack/services/rds.py | 349 | CODE | |
| LOW | ministack/services/rds.py | 987 | CODE | |
| LOW | ministack/services/rds.py | 1399 | CODE | |
| LOW | ministack/services/rds.py | 1729 | CODE | |
| LOW | ministack/services/rds.py | 2295 | CODE | |
| LOW | ministack/services/rds.py | 2536 | CODE | |
| LOW | ministack/services/rds.py | 2837 | CODE | |
| LOW | ministack/services/rds.py | 3046 | CODE | |
| LOW | ministack/services/rds.py | 3077 | CODE | |
| LOW | ministack/services/rds.py | 3465 | CODE | |
| LOW | ministack/services/rds.py | 4085 | CODE | |
| LOW | ministack/services/rds.py | 5705 | CODE | |
| LOW | ministack/services/rds.py | 6534 | CODE | |
| LOW | ministack/services/rds.py | 7413 | CODE | |
| LOW | ministack/services/rds.py | 7432 | CODE | |
| 350 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | CHANGELOG.md | 90 | - **Cognito — `ListUsers` `Filter` matches values case-insensitively** — every comparison was an exact string match, so | CODE |
| LOW | ministack/services/sts.py | 320 | sig = _b64url(hmac.new(b"ministack-fake-key", f"{h}.{p}".encode(), hashlib.sha256).digest()) | CODE |
| LOW⚡ | tests/test_cognito.py | 2010 | "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name": "John Doe", | CODE |
| LOW⚡ | tests/test_cognito.py | 2064 | assert attrs.get("name") == "John Doe" | CODE |
| LOW⚡ | tests/test_cognito.py | 5715 | Username="user@example.com", | CODE |
| LOW⚡ | tests/test_cognito.py | 5719 | UserPoolId=pid, Username="user@example.com", Password="Pass1234!", Permanent=True | CODE |
| LOW⚡ | tests/test_cognito.py | 5749 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 5773 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 5803 | cognito_idp.admin_disable_user(UserPoolId=pid, Username="user@example.com") | CODE |
| LOW⚡ | tests/test_cognito.py | 5809 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 5828 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 5842 | ChallengeResponses={"ANSWER": "test", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 5857 | ChallengeResponses={"ANSWER": "test", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 5870 | "us-east-1_pool", "client123", "user@example.com" | CODE |
| LOW⚡ | tests/test_cognito.py | 5921 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 5930 | ChallengeResponses={"ANSWER": "SECRETCODE", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 5995 | ChallengeResponses={"ANSWER": "STILLWRONG", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6042 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6051 | ChallengeResponses={"ANSWER": "magic-link-code", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6061 | ChallengeResponses={"ANSWER": "123456", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6076 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6085 | ChallengeResponses={"ANSWER": "test", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6095 | ChallengeResponses={"ANSWER": "test", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6112 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6121 | ChallengeResponses={"ANSWER": "test", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6131 | ChallengeResponses={"ANSWER": "test", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6144 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6180 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6188 | ChallengeResponses={"ANSWER": "code", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6209 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6221 | "us-east-1_pool", "client123", "user@example.com" | CODE |
| LOW⚡ | tests/test_cognito.py | 6263 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6267 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6275 | ChallengeResponses={"ANSWER": "", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6279 | ChallengeResponses={"ANSWER": "", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6338 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6347 | ChallengeResponses={"ANSWER": "test", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6357 | ChallengeResponses={"ANSWER": "test", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6393 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6401 | ChallengeResponses={"ANSWER": "", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6420 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6457 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6465 | ChallengeResponses={"ANSWER": "code", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6475 | ChallengeResponses={"ANSWER": "test", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6512 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6520 | ChallengeResponses={"ANSWER": "code", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6556 | "USERNAME": "user@example.com", | CODE |
| LOW⚡ | tests/test_cognito.py | 6564 | assert params.get("USER_ID_FOR_SRP") == "user@example.com" | CODE |
| LOW⚡ | tests/test_cognito.py | 6655 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6663 | ChallengeResponses={"ANSWER": "123456", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6730 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6775 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6784 | ChallengeResponses={"ANSWER": "code", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6888 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 6898 | ChallengeResponses={"ANSWER": f"attempt{i}", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 7002 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 7010 | ChallengeResponses={"ANSWER": "only-server-knows", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 7089 | ChallengeResponses={"ANSWER": "magic-link-token", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 7099 | ChallengeResponses={"ANSWER": "123456", "USERNAME": "user@example.com"}, | CODE |
| LOW⚡ | tests/test_cognito.py | 7119 | AuthParameters={"USERNAME": "user@example.com"}, | CODE |
| 65 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ministack/app.py | 199 | async def handle_request(self, method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/cloudtrail.py | 755 | async def handle_request(method, path, headers, body_bytes, query_params): | CODE |
| LOW | ministack/services/mediaconnect.py | 345 | async def handle_request(method, path, headers, body_bytes, query_params): | CODE |
| LOW | ministack/services/sts.py | 58 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/lambda_microvms.py | 300 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/cloudfront_keyvaluestore.py | 127 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/dsql.py | 938 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/rds.py | 8990 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/secretsmanager.py | 452 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/backup.py | 840 | async def handle_request(method, path, headers, body_bytes, query_params): | CODE |
| LOW | ministack/services/elasticache.py | 845 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/alb.py | 1122 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/config.py | 390 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/ses.py | 117 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/emr.py | 657 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/dynamodb.py | 802 | async def handle_request(method: str, path: str, headers: dict, body: bytes, query_params: dict) -> tuple: | CODE |
| LOW | ministack/services/imds.py | 161 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/opensearch.py | 1299 | async def handle_request(method, path, headers, body_bytes, query_params): | CODE |
| LOW⚡ | ministack/services/cognito.py | 1872 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/waf.py | 342 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/iam.py | 360 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/sqs.py | 257 | async def handle_request(method: str, path: str, headers: dict, | CODE |
| LOW | ministack/services/eks.py | 1642 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/servicediscovery.py | 126 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/ses_v2.py | 280 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/resource_groups.py | 577 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/cloudwatch_logs.py | 277 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/batch.py | 378 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/stepfunctions.py | 251 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/appsync_events.py | 582 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/msk.py | 599 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/s3files.py | 307 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/appconfig.py | 774 | async def handle_request(method, path, headers, body_bytes, query_params): | CODE |
| LOW | ministack/services/bedrock_agent_runtime.py | 700 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/kinesis.py | 344 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/apigateway.py | 337 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/apigateway_v1.py | 1023 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/iot_jobs_data.py | 64 | async def handle_request( | CODE |
| LOW | ministack/services/codebuild.py | 748 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/inspector2.py | 1167 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/mwaa.py | 685 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/eventbridge.py | 270 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/glue.py | 2158 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/bedrock_agent.py | 1369 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/transfer.py | 156 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/appsync.py | 549 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/pipes.py | 633 | async def handle_request(method, path, headers, body_bytes, query_params): | CODE |
| LOW | ministack/services/dynamodb_streams.py | 31 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/cur.py | 237 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/acm.py | 223 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/cloudwatch.py | 424 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/route53.py | 913 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW | ministack/services/ec2.py | 484 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/bedrock_agentcore.py | 426 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/mq.py | 935 | async def handle_request(method: str, path: str, headers: dict, body: bytes, query_params: dict) -> tuple: | CODE |
| LOW | ministack/services/organizations.py | 313 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/cloudfront.py | 1597 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/lambda_svc.py | 1634 | async def handle_request(method: str, path: str, headers: dict, body: bytes, query_params: dict) -> tuple: | CODE |
| LOW | ministack/services/ecs_metadata.py | 81 | async def handle_request(method, path, headers, body, query_params): | CODE |
| LOW⚡ | ministack/services/iot_data.py | 80 | async def handle_request( | CODE |
| 21 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | ministack/services/dynamodb.py | 4564 | # Create the destination table from TableCreationParameters. | COMMENT |
| MEDIUM | ministack/services/stepfunctions.py | 363 | # Creating the same machine twice is idempotent on AWS and makes SDK retry safe | COMMENT |
| MEDIUM | ministack/services/cloudformation/changesets.py | 113 | # Create a placeholder stack in REVIEW_IN_PROGRESS | COMMENT |
| MEDIUM | tests/test_stepfunctions.py | 6435 | # Create a Lambda that sleeps briefly to simulate real work. | COMMENT |
| MEDIUM | tests/test_eks.py | 708 | # Create the 4 standard addons in one go. | COMMENT |
| MEDIUM | tests/test_mq.py | 370 | # Create a user | COMMENT |
| MEDIUM⚡ | tests/test_appsync_events.py | 1271 | # Create a throwaway API so we can open a connection. | COMMENT |
| MEDIUM | tests/test_rds_data.py | 1330 | # Create a secret with JSON credentials | COMMENT |
| MEDIUM⚡ | tests/test_lambda.py | 6131 | # Create a queue directly in the internal state | COMMENT |
| MEDIUM⚡ | tests/test_lambda.py | 8066 | # Create a synthetic execution. | COMMENT |
| MEDIUM | tests/test_lambda.py | 4169 | # Create a layer with a Python module | COMMENT |
| MEDIUM | tests/test_lambda.py | 4180 | # Create a function that imports from the layer | COMMENT |
| MEDIUM | tests/test_lambda.py | 4289 | # Create a layer with a Node.js module under nodejs/node_modules/ | COMMENT |
| MEDIUM | tests/test_lambda.py | 4303 | # Create a Node.js function that requires the layer package | COMMENT |
| MEDIUM | tests/test_lambda.py | 4340 | # Create a layer with a Node.js package under nodejs/node_modules/ | COMMENT |
| MEDIUM | tests/test_lambda.py | 4354 | # Create an ESM handler that uses native import to load the layer package. | COMMENT |
| MEDIUM⚡ | tests/test_cloudwatch_logs.py | 1508 | # Create the parent log group first — _put_metric_filter would normally | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docker-compose.yml | 41 | interval: 5s | COMMENT |
| LOW | docker-compose.yml | 61 | # retries: 5 | COMMENT |
| LOW | ministack/app.py | 41 | r"^([a-f0-9]{8})\.execute-api\." + re.escape(_MINISTACK_HOST) + r"(?::\d+)?$" | COMMENT |
| LOW | ministack/app.py | 2181 | # process. Persistence strips container ids from snapshots, so any | COMMENT |
| LOW | ministack/app.py | 2201 | _reap.join(timeout=_DOCKER_REAP_BOOT_DEADLINE) | COMMENT |
| LOW | ministack/app.py | 2221 | # touches Transfer Family. Guarded on the module already being | COMMENT |
| LOW | ministack/app.py | 2381 | # `appsync` credential scope at `/v2/apis`, so the | COMMENT |
| LOW | ministack/app.py | 2401 | # use RDS. Instead, only eager-import when a persisted state file | COMMENT |
| LOW | ministack/app.py | 2421 | # `lambda_durable` is reached only via `lambda_svc.handle_request`, never | COMMENT |
| LOW | ministack/core/lambda_runtime.py | 81 | # AWS never sends and diverge from the docker executor, which spawns freely. | COMMENT |
| LOW | ministack/services/rds.py | 1981 | # Host port must come from `_HostPort` (stored at create time), NOT from | COMMENT |
| LOW | ministack/services/rds.py | 7661 | COMMENT | |
| LOW | ministack/services/backup.py | 581 | # restore-testing plans/selections, backup-plan templates or tiering | COMMENT |
| LOW | ministack/services/dynamodb.py | 81 | _pitr_settings = AccountRegionScopedDict() | COMMENT |
| LOW | ministack/services/dynamodb.py | 221 | COMMENT | |
| LOW | ministack/services/cognito.py | 281 | "samlp": "urn:oasis:names:tc:SAML:2.0:protocol", | COMMENT |
| LOW | ministack/services/cognito.py | 441 | # Id, Name, Arn, CreationDate, LastModifiedDate, Status, | COMMENT |
| LOW | ministack/services/cognito.py | 461 | _revoked_tokens: set = set() # refresh-token values invalidated by RevokeToken | COMMENT |
| LOW | ministack/services/cognito.py | 481 | # --------------------------------------------------------------------------- | COMMENT |
| LOW | ministack/services/cognito.py | 501 | # would add no isolation; the unguessable token is the isolation boundary. | COMMENT |
| LOW | ministack/services/cognito.py | 521 | # regional pool access in the worker context. | COMMENT |
| LOW | ministack/services/cognito.py | 4421 | COMMENT | |
| LOW | ministack/services/iam.py | 81 | # — so a 12-digit session can never read entries under the literal | COMMENT |
| LOW | ministack/services/iam.py | 101 | # to permissive autocreate by setting | COMMENT |
| LOW | ministack/services/sqs.py | 1761 | COMMENT | |
| LOW | ministack/services/lambda_durable.py | 41 | # --------------------------------------------------------------------------- | COMMENT |
| LOW | ministack/services/cloudwatch_logs.py | 61 | # Region-scoped: CW Logs destinations and the vended-logs delivery resources | COMMENT |
| LOW | ministack/services/stepfunctions.py | 4301 | # --------------------------------------------------------------------------- | COMMENT |
| LOW | ministack/services/apigateway.py | 101 | _integrations = AccountRegionScopedDict() # api_id -> {integration_id -> integration object} | COMMENT |
| LOW | ministack/services/apigateway.py | 121 | # rather than left to grow with every distinct token a long-lived instance sees. | COMMENT |
| LOW | ministack/services/apigateway.py | 761 | if route_scopes and not any(scope in token_scopes for scope in route_scopes): | COMMENT |
| LOW | ministack/services/apigateway.py | 1601 | status = lambda_response.get("statusCode", 200) | COMMENT |
| LOW | ministack/services/apigateway_v1.py | 121 | logger = logging.getLogger("apigateway_v1") | COMMENT |
| LOW | ministack/services/eventbridge.py | 4181 | # block — and on the epoch second an event carries, and nothing else evicts an | COMMENT |
| LOW | ministack/services/glue.py | 381 | handler = handlers.get(action) | COMMENT |
| LOW | ministack/services/glue.py | 401 | # Iceberg REST endpoint served by `services/s3tables.py`, whose prefix is a | COMMENT |
| LOW | ministack/services/pipes.py | 381 | COMMENT | |
| LOW | ministack/services/acm.py | 41 | # GetCertificate path already honours that. Writing it plaintext to | COMMENT |
| LOW | ministack/services/ec2.py | 1881 | # instance has a real box behind it and ssm:SendCommand can return a real exit | COMMENT |
| LOW | ministack/services/ec2.py | 2001 | # Only Name is required on AWS: ImageLocation and BlockDeviceMapping.N are both optional, and | COMMENT |
| LOW | ministack/services/mq.py | 41 | COMMENT | |
| LOW | ministack/services/lambda_svc.py | 141 | # Recursive-loop detection | COMMENT |
| LOW | ministack/services/lambda_svc.py | 241 | # the AWS RIE image (matching fzonneveld's "docker = docker, no fallbacks" | COMMENT |
| LOW | ministack/services/lambda_svc.py | 381 | _extract_zip_preserving_mode(zf, code_dir) | COMMENT |
| LOW | ministack/services/lambda_svc.py | 2761 | # Idle environments stay warm ~5-15 minutes before eviction. | COMMENT |
| LOW | ministack/services/lambda_svc.py | 2781 | # LocalStack-compat (not an AWS behavior): LAMBDA_KEEPALIVE_MS=0 forces a cold | COMMENT |
| LOW | ministack/services/lambda_svc.py | 3721 | "_LAMBDA_TIMEOUT": str(timeout), | COMMENT |
| LOW | ministack/services/lambda_svc.py | 3741 | container_env[INVOKE_DEPTH_ENV] = str(_invoke_depth.get()) | COMMENT |
| LOW | ministack/services/lambda_svc.py | 4141 | # | COMMENT |
| LOW | ministack/services/firehose.py | 541 | COMMENT | |
| LOW | ministack/services/s3.py | 461 | # | COMMENT |
| LOW | ministack/services/iot.py | 1101 | COMMENT | |
| LOW | ministack/services/iot.py | 2641 | if _SQL_STRING_RE.match(expr): | COMMENT |
| LOW | ministack/services/iot.py | 2941 | # OR binds loosest, then AND, then NOT, and a parenthesised group overrides all | COMMENT |
| LOW | ministack/services/iot.py | 3621 | # The job store and per-thing execution store live here so that the `iot` | COMMENT |
| LOW | ministack/services/iot.py | 4661 | version = rec["version"] | COMMENT |
| LOW | ministack/services/iot.py | 4681 | # is stripped on outbound delivery. | COMMENT |
| LOW | ministack/services/iot.py | 4701 | # aliases, message expiry, flow control (receive maximum), subscription | COMMENT |
| LOW | ministack/services/iot.py | 5861 | # Shadow-over-MQTT bridge — AFTER delivery and rule evaluation, so rules | COMMENT |
| LOW | ministack/services/iot.py | 7141 | # | COMMENT |
| 10 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ministack/core/x509_utils.py | 21 | CODE | |
| LOW | ministack/services/lambda_durable.py | 19 | CODE | |
| LOW | ministack/services/iot_jobs_data.py | 26 | CODE | |
| LOW | ministack/services/transfer.py | 33 | CODE | |
| LOW | ministack/services/iot_data.py | 15 | CODE | |
| LOW | ministack/services/iot.py | 51 | CODE | |
| LOW | ministack/services/cloudformation/__init__.py | 32 | CODE | |
| LOW | ministack/services/cloudformation/__init__.py | 32 | CODE | |
| LOW | ministack/services/cloudformation/__init__.py | 32 | CODE | |
| LOW | ministack/services/cloudformation/__init__.py | 32 | CODE | |
| LOW | ministack/services/cloudformation/__init__.py | 32 | CODE | |
| LOW | ministack/services/cloudformation/__init__.py | 32 | CODE | |
| LOW | ministack/services/cloudformation/__init__.py | 32 | CODE | |
| LOW | ministack/services/cloudformation/__init__.py | 117 | CODE | |
| LOW | ministack/services/cloudformation/__init__.py | 119 | CODE | |
| LOW | tests/test_ministack.py | 526 | CODE | |
| LOW | tests/test_persistence.py | 520 | CODE | |
| LOW | tests/test_iot_data.py | 12 | CODE | |
| LOW | Testcontainers/python-testcontainers/test_ministack.py | 7 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | ministack/services/eks.py | 0 | dispatch off the event loop. request paths here reach the docker daemon (container create/start/stop/ inspect), which bl | STRING |
| HIGH | ministack/services/codebuild.py | 0 | dispatch off the event loop. request paths here reach the docker daemon (container create/start/stop/ inspect), which bl | STRING |
| HIGH | ministack/services/glue.py | 0 | dispatch off the event loop. request paths here reach the docker daemon (container create/start/stop/ inspect), which bl | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | ministack/core/iam_evaluator.py | 507 | # Step 3: implicit deny | COMMENT |
| LOW | ministack/core/iam_evaluator.py | 483 | # Step 1: explicit Deny | COMMENT |
| LOW | ministack/core/iam_evaluator.py | 495 | # Step 2: explicit Allow | COMMENT |
| LOW⚡ | tests/test_cognito.py | 1989 | # Step 1: GET /oauth2/authorize → extract RelayState from redirect Location | COMMENT |
| LOW⚡ | tests/test_cognito.py | 2005 | # Step 2: POST /saml2/idpresponse with mock SAML assertion | COMMENT |
| LOW⚡ | tests/test_cognito.py | 2058 | # Step 4: Verify user was created via AdminGetUser | COMMENT |
| LOW⚡ | tests/test_cognito.py | 2331 | # Step 3: MS must have called the IdP's token endpoint with the right | COMMENT |
| LOW⚡ | tests/test_cognito.py | 2341 | # Step 4: MS must redirect to the app callback with a MS-issued code | COMMENT |
| LOW⚡ | tests/test_cognito.py | 2349 | # Step 5: the federated user was provisioned under the OIDC provider | COMMENT |
| LOW⚡ | tests/test_cognito.py | 3068 | # Step 1: username only. | COMMENT |
| LOW | tests/test_cognito.py | 2033 | # Step 3: POST /oauth2/token with authorization_code grant | COMMENT |
| LOW | tests/test_cognito.py | 2306 | # Step 1: kick off authorize, grab the relay state from the IdP redirect. | COMMENT |
| LOW | tests/test_cognito.py | 2320 | # Step 2: simulate the OIDC IdP calling back with code+state. | COMMENT |
| LOW | tests/test_cognito.py | 3085 | # Step 2: password. | COMMENT |
| LOW | tests/test_persistence.py | 2691 | # Step 3: cold-import — wipe sys.modules and re-import. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | ministack/core/iam_evaluator.py | 507 | # Step 3: implicit deny | COMMENT |
| LOW | ministack/core/iam_evaluator.py | 483 | # Step 1: explicit Deny | COMMENT |
| LOW | ministack/core/iam_evaluator.py | 495 | # Step 2: explicit Allow | COMMENT |
| LOW⚡ | tests/test_cognito.py | 1989 | # Step 1: GET /oauth2/authorize → extract RelayState from redirect Location | COMMENT |
| LOW⚡ | tests/test_cognito.py | 2005 | # Step 2: POST /saml2/idpresponse with mock SAML assertion | COMMENT |
| LOW⚡ | tests/test_cognito.py | 2058 | # Step 4: Verify user was created via AdminGetUser | COMMENT |
| LOW⚡ | tests/test_cognito.py | 2331 | # Step 3: MS must have called the IdP's token endpoint with the right | COMMENT |
| LOW⚡ | tests/test_cognito.py | 2341 | # Step 4: MS must redirect to the app callback with a MS-issued code | COMMENT |
| LOW⚡ | tests/test_cognito.py | 2349 | # Step 5: the federated user was provisioned under the OIDC provider | COMMENT |
| LOW⚡ | tests/test_cognito.py | 3068 | # Step 1: username only. | COMMENT |
| LOW | tests/test_cognito.py | 2033 | # Step 3: POST /oauth2/token with authorization_code grant | COMMENT |
| LOW | tests/test_cognito.py | 2306 | # Step 1: kick off authorize, grab the relay state from the IdP redirect. | COMMENT |
| LOW | tests/test_cognito.py | 2320 | # Step 2: simulate the OIDC IdP calling back with code+state. | COMMENT |
| LOW | tests/test_cognito.py | 3085 | # Step 2: password. | COMMENT |
| LOW | tests/test_persistence.py | 2691 | # Step 3: cold-import — wipe sys.modules and re-import. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ministack/services/dynamodb.py | 2678 | item[attr] = operand # fallback: just set to operand | CODE |
| LOW | ministack/services/cloudformation/provisioners.py | 4132 | # Pre-check for duplicates to raise exception (not just return error response) | COMMENT |
| MEDIUM | tests/test_dynamodb.py | 2613 | # is cheap and keeps the test robust if that ever changes. | COMMENT |
| LOW | tests/test_ecr.py | 586 | # client still works after our /v2/ → ECR routing change. We just call it; | COMMENT |
| MEDIUM | tests/test_firehose.py | 713 | # Use a high Limit so the assertion is robust to other streams the shared | COMMENT |
| LOW | tests/test_cfn.py | 6350 | # GetAccount must reflect the role arn the stack just set. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ministack/core/responses.py | 29 | def set_request_account_id(access_key_id: str) -> None: | CODE |
| LOW | ministack/core/responses.py | 55 | def set_request_region(region: str | None) -> None: | CODE |
| LOW | ministack/services/opensearch.py | 574 | def _set_vpc_options(rec: dict, options) -> None: | CODE |
| LOW | ministack/services/cognito.py | 1288 | def _update_pending_challenge_result(session: dict, challenge_result: bool | None) -> None: | CODE |
| LOW | ministack/services/cognito.py | 4473 | def _set_user_identities(user: dict, identities: list) -> None: | CODE |
| LOW | ministack/services/ecs_metadata.py | 68 | def set_docker_id(token: str, docker_id: str) -> None: | CODE |
| LOW⚡ | ministack/services/iot.py | 163 | def set_mtls_server_cert(cert_pem: str, key_pem: str) -> None: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_codebuild.py | 391 | # The build runs in the project's image; the agent image only orchestrates. | COMMENT |
| MEDIUM⚡ | tests/test_bedrock.py | 1120 | # Bedrock control-plane (guardrails, custom/imported models, provisioned | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ministack/services/dynamodb.py | 2758 | # Check if it's a valid RETURNING variant — invalid ones get ValidationError. | COMMENT |
| LOW | ministack/services/rds_data.py | 200 | # Check if it's asking for a specific column (privilege check) | COMMENT |
| LOW | tests/test_emr.py | 513 | # Set back to True | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ministack/services/rds.py | 3906 | CODE | |
| LOW | ministack/services/ses.py | 197 | CODE | |
| LOW | ministack/services/mwaa.py | 450 | CODE | |
| LOW | ministack/services/athena.py | 545 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | ministack/services/lambda_svc.py | 1184 | CODE |