gunicorn 'Green Unicorn' is a WSGI HTTP Server for UNIX, fast clients and sleepy applications.
This report summarizes scanner evidence for benoitc/gunicorn, a Python project with 10,699 GitHub stars. SynthScan examined 109,632 lines of code across 593 source files, recording 3307 pattern matches distributed across 23 syntactic categories. The legacy adjusted pattern signal is 54.2 (High 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? 2398 finding(s).
Are imports declared and package/API names verified? 116 finding(s).
Are wrappers, guards, and repeated structures necessary? 2393 finding(s).
Which changes need focused human review? 3307 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 3307 distinct pattern matches across 23 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 | tests/test_gtornado.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_gtornado.py | 331 | # Create a mock handler to test the patched clear method | COMMENT |
| MEDIUM | tests/support_dirty_apps.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_invalid_requests.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_asgi_uwsgi_protocol.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_asgi_header_security.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_http2_alpn.py | 3 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_python_protocol.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/conftest.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_asgi_error_handling.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_asgi_error_handling.py | 242 | # Create a mock task | COMMENT |
| MEDIUM | tests/test_asgi_error_handling.py | 261 | # Create a mock task that's already done | COMMENT |
| MEDIUM | tests/test_dirty_errors.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_asgi_http_scope.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/support.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM⚡ | tests/test_asgi_worker.py | 392 | # Create a minimal protocol instance | COMMENT |
| MEDIUM | tests/test_asgi_worker.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_http2_errors.py | 3 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_debug.py | 3 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_http2_request.py | 3 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_http2_request.py | 705 | # Create a mock socket | COMMENT |
| MEDIUM | tests/test_http2_request.py | 724 | # Create a mock HTTP/1 request (no priority attributes) | COMMENT |
| MEDIUM | tests/test_asgi_forwarded_headers.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_statsd.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_pidfile.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_asgi_streaming.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM⚡ | tests/test_asgi_disconnect.py | 61 | # Create a mock request for the body receiver | COMMENT |
| MEDIUM⚡ | tests/test_asgi_disconnect.py | 66 | # Create a body receiver (simulating active request) | COMMENT |
| MEDIUM⚡ | tests/test_asgi_disconnect.py | 173 | # Create a mock task that's still running | COMMENT |
| MEDIUM⚡ | tests/test_asgi_disconnect.py | 186 | # Create a mock task that's already done | COMMENT |
| MEDIUM⚡ | tests/test_asgi_disconnect.py | 203 | # Create a mock request with no body | COMMENT |
| MEDIUM | tests/test_asgi_disconnect.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_asgi_disconnect.py | 87 | # Create a mock request for the body receiver | COMMENT |
| MEDIUM | tests/test_asgi_disconnect.py | 134 | # Create a mock task | COMMENT |
| MEDIUM | tests/test_asgi_disconnect.py | 155 | # Create a mock task | COMMENT |
| MEDIUM | tests/test_http2_live.py | 3 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_asgi_websocket_enhanced.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_asgi_connection_close.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_dirty_arbiter.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_systemd.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_dirty_tlv.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_util.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_asgi_parser_validation.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_http2_integration.py | 3 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_dirty_app.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_asgi_proxy_protocol.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_asgi_keepalive_smuggling.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/treq_asgi.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_dirty_integration.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_header_policy_parity.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_arbiter.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_dirty_hooks.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_http2_stream.py | 3 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_signal_integration.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_asgi_http2_response.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/treq.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/treq.py | 7 | # This file is part of the pywebmachine package released | COMMENT |
| MEDIUM | tests/test_ssl.py | 3 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_http.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| MEDIUM | tests/test_sock.py | 2 | # This file is part of gunicorn released under the MIT license. | COMMENT |
| 439 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | tests/test_asgi_header_security.py | 21 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_header_security.py | 23 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_header_security.py | 91 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_header_security.py | 93 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_header_security.py | 246 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_header_security.py | 248 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_header_security.py | 296 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_header_security.py | 298 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_header_security.py | 340 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_header_security.py | 342 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_header_security.py | 152 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_header_security.py | 154 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_error_handling.py | 88 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_error_handling.py | 90 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_error_handling.py | 316 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_error_handling.py | 318 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_error_handling.py | 353 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_error_handling.py | 355 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_error_handling.py | 20 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_error_handling.py | 22 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_error_handling.py | 120 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_error_handling.py | 122 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_error_handling.py | 216 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_error_handling.py | 218 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_error_handling.py | 274 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_error_handling.py | 276 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_http_scope.py | 96 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_http_scope.py | 98 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_http_scope.py | 18 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_http_scope.py | 20 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_http_scope.py | 178 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_http_scope.py | 180 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_http_scope.py | 256 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_http_scope.py | 258 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_http_scope.py | 350 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_http_scope.py | 352 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_http_scope.py | 478 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_http_scope.py | 480 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_http_scope.py | 564 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_http_scope.py | 566 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_http_scope.py | 647 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_http_scope.py | 649 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_worker.py | 271 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_worker.py | 273 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_worker.py | 745 | # ============================================================================ | COMMENT |
| MEDIUM⚡ | tests/test_asgi_worker.py | 747 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_worker.py | 25 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_worker.py | 27 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_worker.py | 113 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_worker.py | 115 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_worker.py | 126 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_worker.py | 128 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_worker.py | 350 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_worker.py | 352 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_worker.py | 413 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_worker.py | 415 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_worker.py | 528 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_worker.py | 530 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_worker.py | 800 | # ============================================================================ | COMMENT |
| MEDIUM | tests/test_asgi_worker.py | 802 | # ============================================================================ | COMMENT |
| 366 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_gtornado.py | 77 | def test_init_process_clears_ioloop(self): | CODE |
| LOW | tests/test_gtornado.py | 109 | def test_handle_request_increments_counter(self): | CODE |
| LOW | tests/test_gtornado.py | 121 | def test_max_requests_triggers_shutdown(self): | CODE |
| LOW | tests/test_gtornado.py | 155 | def test_handle_exit_sets_alive_false(self): | CODE |
| LOW | tests/test_gtornado.py | 165 | def test_handle_exit_only_once(self): | CODE |
| LOW | tests/test_gtornado.py | 200 | def test_watchdog_notifies_when_alive(self): | CODE |
| LOW | tests/test_gtornado.py | 211 | def test_watchdog_detects_parent_death(self): | CODE |
| LOW | tests/test_gtornado.py | 242 | def test_heartbeat_stops_server_when_not_alive(self): | CODE |
| LOW | tests/test_gtornado.py | 254 | def test_heartbeat_stops_ioloop_after_server(self): | CODE |
| LOW | tests/test_gtornado.py | 288 | def test_wsgi_callable_wrapped_in_container(self): | CODE |
| LOW | tests/test_gtornado.py | 303 | def test_tornado_application_not_wrapped(self): | CODE |
| LOW | tests/test_gtornado.py | 323 | def test_setup_patches_request_handler(self): | CODE |
| LOW | tests/test_gtornado.py | 364 | def test_run_sets_up_callbacks(self): | CODE |
| LOW | tests/test_gtornado.py | 384 | def test_run_creates_http_server(self): | CODE |
| LOW | tests/test_gtornado.py | 400 | def test_run_adds_sockets_to_server(self): | CODE |
| LOW | tests/test_asgi_uwsgi_protocol.py | 119 | def test_post_body_round_trips(server): | CODE |
| LOW | tests/test_asgi_uwsgi_protocol.py | 127 | def test_keepalive_serves_multiple_on_one_worker(server): | CODE |
| LOW⚡ | tests/test_asgi_header_security.py | 28 | def test_valid_header_name_accepted(self): | CODE |
| LOW⚡ | tests/test_asgi_header_security.py | 98 | def test_header_value_with_bare_cr_rejected(self): | CODE |
| LOW⚡ | tests/test_asgi_header_security.py | 253 | def test_oversized_header_value_handled(self): | CODE |
| LOW⚡ | tests/test_asgi_header_security.py | 303 | def test_valid_host_header_accepted(self): | CODE |
| LOW⚡ | tests/test_asgi_header_security.py | 347 | def test_content_type_with_charset(self): | CODE |
| LOW | tests/test_asgi_header_security.py | 42 | def test_header_name_with_null_rejected(self): | CODE |
| LOW | tests/test_asgi_header_security.py | 54 | def test_header_name_with_cr_rejected(self): | CODE |
| LOW | tests/test_asgi_header_security.py | 66 | def test_header_name_with_lf_rejected(self): | CODE |
| LOW | tests/test_asgi_header_security.py | 78 | def test_empty_header_name_rejected(self): | CODE |
| LOW | tests/test_asgi_header_security.py | 111 | def test_header_value_with_bare_lf_rejected(self): | CODE |
| LOW | tests/test_asgi_header_security.py | 124 | def test_header_value_special_characters_allowed(self): | CODE |
| LOW | tests/test_asgi_header_security.py | 138 | def test_header_value_with_tab_allowed(self): | CODE |
| LOW | tests/test_asgi_header_security.py | 186 | def test_headers_lowercased_in_scope(self): | CODE |
| LOW | tests/test_asgi_header_security.py | 201 | def test_header_names_are_bytes(self): | CODE |
| LOW | tests/test_asgi_header_security.py | 215 | def test_header_values_are_bytes(self): | CODE |
| LOW | tests/test_asgi_header_security.py | 229 | def test_header_order_preserved(self): | CODE |
| LOW | tests/test_asgi_header_security.py | 273 | def test_many_headers_handled(self): | CODE |
| LOW | tests/test_asgi_header_security.py | 315 | def test_host_header_with_port_accepted(self): | CODE |
| LOW | tests/test_asgi_header_security.py | 361 | def test_content_type_multipart(self): | CODE |
| LOW⚡ | tests/test_http2_alpn.py | 79 | def test_returns_alpn_protocol(self): | CODE |
| LOW⚡ | tests/test_http2_alpn.py | 89 | def test_returns_none_when_not_negotiated(self): | CODE |
| LOW⚡ | tests/test_http2_alpn.py | 94 | def test_returns_none_for_non_ssl_socket(self): | CODE |
| LOW⚡ | tests/test_http2_alpn.py | 99 | def test_handles_attribute_error(self): | CODE |
| LOW | tests/test_http2_alpn.py | 52 | def test_empty_protocols_returns_empty(self): | CODE |
| LOW | tests/test_http2_alpn.py | 59 | def test_none_protocols_returns_empty(self): | CODE |
| LOW | tests/test_http2_alpn.py | 127 | def test_returns_false_for_none(self): | CODE |
| LOW | tests/test_http2_alpn.py | 132 | def test_returns_false_for_non_ssl(self): | CODE |
| LOW | tests/test_http2_alpn.py | 236 | def test_handshake_called_when_do_handshake_on_connect_false(self, async_worker): | CODE |
| LOW | tests/test_http2_alpn.py | 254 | def test_no_handshake_when_do_handshake_on_connect_true(self, async_worker): | CODE |
| LOW | tests/test_http2_alpn.py | 273 | def test_no_handshake_for_non_ssl_socket(self, async_worker): | CODE |
| LOW | tests/test_http2_alpn.py | 333 | def test_gevent_inherits_async_worker(self): | CODE |
| LOW | tests/test_http2_alpn.py | 345 | def test_gevent_handle_calls_super(self, gevent_worker): | CODE |
| LOW | tests/test_python_protocol.py | 38 | def test_get_with_query_string(self): | CODE |
| LOW | tests/test_python_protocol.py | 94 | def test_post_with_content_length(self): | CODE |
| LOW | tests/test_python_protocol.py | 139 | def test_chunked_with_extension(self): | CODE |
| LOW | tests/test_python_protocol.py | 163 | def test_partial_request_line(self): | CODE |
| LOW | tests/test_python_protocol.py | 210 | def test_partial_chunked_body(self): | CODE |
| LOW | tests/test_python_protocol.py | 235 | def test_invalid_request_line(self): | CODE |
| LOW | tests/test_python_protocol.py | 249 | def test_unsupported_http_version(self): | CODE |
| LOW | tests/test_python_protocol.py | 290 | def test_multiple_requests_keepalive(self): | CODE |
| LOW | tests/test_python_protocol.py | 407 | def test_from_parser_body_info(self): | CODE |
| LOW | tests/test_python_protocol.py | 492 | def test_connection_close_header(self): | CODE |
| LOW | tests/test_python_protocol.py | 499 | def test_connection_keepalive_header(self): | CODE |
| 1536 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_asgi_uwsgi_protocol.py | 76 | except socket.timeout: | CODE |
| HIGH | tests/test_asgi_header_security.py | 269 | except (InvalidHeader, ParseError): | CODE |
| HIGH | tests/test_asgi_header_security.py | 291 | except (InvalidHeader, ParseError): | CODE |
| HIGH | tests/test_http2_alpn.py | 171 | except Exception: | CODE |
| HIGH | tests/test_http2_alpn.py | 248 | except StopIteration: | CODE |
| HIGH | tests/test_http2_alpn.py | 267 | except StopIteration: | CODE |
| HIGH | tests/test_http2_alpn.py | 283 | except StopIteration: | CODE |
| HIGH | tests/support.py | 56 | except ValueError: | CODE |
| HIGH | tests/test_http2_live.py | 38 | except ImportError: | CODE |
| HIGH | tests/test_asgi_connection_close.py | 73 | except socket.timeout: | CODE |
| HIGH | tests/test_dirty_arbiter.py | 1190 | except asyncio.CancelledError: | CODE |
| HIGH | tests/test_dirty_arbiter.py | 1232 | except asyncio.CancelledError: | CODE |
| HIGH | tests/test_dirty_arbiter.py | 374 | except asyncio.CancelledError: | CODE |
| HIGH | tests/test_dirty_arbiter.py | 765 | except Exception: | CODE |
| HIGH | tests/test_dirty_arbiter.py | 1253 | except asyncio.CancelledError: | CODE |
| HIGH | tests/test_dirty_arbiter.py | 808 | except (asyncio.TimeoutError, TimeoutError): | CODE |
| HIGH | tests/test_asgi_keepalive_smuggling.py | 188 | except (asyncio.CancelledError, Exception): | CODE |
| HIGH | tests/treq_asgi.py | 106 | except ValueError: | CODE |
| HIGH | tests/test_dirty_integration.py | 236 | except asyncio.CancelledError: | CODE |
| HIGH | tests/test_dirty_integration.py | 271 | except asyncio.CancelledError: | CODE |
| HIGH | tests/test_dirty_integration.py | 242 | except Exception: | CODE |
| HIGH | tests/test_dirty_integration.py | 369 | except asyncio.CancelledError: | CODE |
| HIGH | tests/test_arbiter.py | 150 | except SystemExit: | CODE |
| HIGH | tests/test_signal_integration.py | 124 | except (ProcessLookupError, OSError): | CODE |
| HIGH | tests/test_signal_integration.py | 131 | except (ProcessLookupError, OSError): | CODE |
| HIGH | tests/treq.py | 245 | except StopIteration: | CODE |
| HIGH | tests/treq.py | 67 | except ValueError: | CODE |
| HIGH | tests/test_asgi_keepalive_pipeline.py | 28 | except ImportError: | CODE |
| HIGH | tests/test_http2_h2c.py | 413 | except OSError: | CODE |
| HIGH | tests/test_control_socket_integration.py | 129 | except (ProcessLookupError, OSError): | CODE |
| HIGH | tests/test_control_socket_integration.py | 136 | except (ProcessLookupError, OSError): | CODE |
| HIGH | tests/test_gthread.py | 339 | except (OSError, ValueError): | CODE |
| HIGH | tests/test_dirty_worker.py | 731 | except asyncio.IncompleteReadError: | CODE |
| HIGH | tests/docker/asgi_framework_compat/conftest.py | 86 | except httpx.RequestError: | CODE |
| HIGH | …er/asgi_framework_compat/tests/test_websocket_scope.py | 93 | except ConnectionClosedOK: | CODE |
| HIGH | …er/asgi_framework_compat/tests/test_websocket_scope.py | 103 | except ConnectionClosedOK: | CODE |
| HIGH | …er/asgi_framework_compat/tests/test_websocket_scope.py | 113 | except ConnectionClosedOK: | CODE |
| HIGH | …er/asgi_framework_compat/tests/test_websocket_scope.py | 124 | except ConnectionClosedOK: | CODE |
| HIGH | …er/asgi_framework_compat/tests/test_websocket_scope.py | 135 | except ConnectionClosedOK: | CODE |
| HIGH | …er/asgi_framework_compat/tests/test_websocket_scope.py | 151 | except ConnectionClosedOK: | CODE |
| HIGH | …er/asgi_framework_compat/tests/test_websocket_scope.py | 161 | except ConnectionClosedOK: | CODE |
| HIGH | …/asgi_framework_compat/frameworks/starlette_app/app.py | 210 | except Exception: | CODE |
| HIGH | …/asgi_framework_compat/frameworks/starlette_app/app.py | 221 | except Exception: | CODE |
| HIGH | …er/asgi_framework_compat/frameworks/fastapi_app/app.py | 215 | except WebSocketDisconnect: | CODE |
| HIGH | …er/asgi_framework_compat/frameworks/fastapi_app/app.py | 227 | except WebSocketDisconnect: | CODE |
| HIGH | …r/asgi_framework_compat/frameworks/litestar_app/app.py | 184 | except Exception: | CODE |
| HIGH | …r/asgi_framework_compat/frameworks/litestar_app/app.py | 196 | except Exception: | CODE |
| HIGH | …asgi_framework_compat/frameworks/blacksheep_app/app.py | 182 | except Exception: | CODE |
| HIGH | …asgi_framework_compat/frameworks/blacksheep_app/app.py | 194 | except Exception: | CODE |
| HIGH | tests/docker/per_app_allocation/test_per_app_e2e.py | 112 | except requests.exceptions.RequestException: | CODE |
| HIGH | tests/docker/uwsgi/conftest.py | 85 | except requests.RequestException: | CODE |
| HIGH | …ts/docker/asgi_compliance/test_websocket_compliance.py | 664 | except websockets.exceptions.ConnectionClosed: | CODE |
| HIGH | tests/docker/asgi_compliance/apps/websocket_app.py | 190 | except ValueError: | CODE |
| HIGH | tests/docker/asgi_compliance/apps/websocket_app.py | 307 | except ValueError: | CODE |
| HIGH | tests/docker/asgi_compliance/apps/websocket_app.py | 348 | except ValueError: | CODE |
| HIGH | tests/docker/asgi_compliance/apps/websocket_app.py | 439 | except ValueError: | CODE |
| HIGH | tests/docker/asgi_compliance/apps/framework_apps.py | 29 | except ImportError: | CODE |
| HIGH | tests/docker/asgi_compliance/apps/framework_apps.py | 39 | except ImportError: | CODE |
| HIGH | tests/docker/asgi_compliance/apps/framework_apps.py | 150 | except Exception: | CODE |
| HIGH | tests/docker/asgi_compliance/apps/framework_apps.py | 293 | except Exception: | CODE |
| 108 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_http2_alpn.py | 171 | except Exception: | CODE |
| MEDIUM | tests/test_dirty_arbiter.py | 370 | def mock_consumer(): | CODE |
| LOW | tests/test_dirty_arbiter.py | 765 | except Exception: | CODE |
| LOW | tests/test_dirty_integration.py | 242 | except Exception: | CODE |
| LOW⚡ | tests/test_arbiter.py | 297 | except Exception: | CODE |
| LOW | tests/test_asgi_invalid_requests.py | 119 | except Exception as exc: # parser rejected it outright, also fine | CODE |
| LOW | …/asgi_framework_compat/frameworks/starlette_app/app.py | 110 | except Exception as e: | CODE |
| MEDIUM | …/asgi_framework_compat/frameworks/starlette_app/app.py | 111 | print(f"Error serializing key {key}: {e}", file=sys.stderr) | CODE |
| LOW | …/asgi_framework_compat/frameworks/starlette_app/app.py | 127 | except Exception as e: | CODE |
| LOW | …/asgi_framework_compat/frameworks/starlette_app/app.py | 210 | except Exception: | CODE |
| LOW | …/asgi_framework_compat/frameworks/starlette_app/app.py | 221 | except Exception: | CODE |
| LOW | …/asgi_framework_compat/frameworks/starlette_app/app.py | 231 | except Exception as e: | CODE |
| LOW | …er/asgi_framework_compat/frameworks/fastapi_app/app.py | 106 | except Exception as e: | CODE |
| MEDIUM | …er/asgi_framework_compat/frameworks/fastapi_app/app.py | 107 | print(f"Error serializing key {key}: {e}", file=sys.stderr) | CODE |
| LOW | …er/asgi_framework_compat/frameworks/fastapi_app/app.py | 125 | except Exception as e: | CODE |
| LOW | …er/asgi_framework_compat/frameworks/fastapi_app/app.py | 238 | except Exception as e: | CODE |
| LOW | …r/asgi_framework_compat/frameworks/litestar_app/app.py | 184 | except Exception: | CODE |
| LOW | …r/asgi_framework_compat/frameworks/litestar_app/app.py | 196 | except Exception: | CODE |
| LOW | …asgi_framework_compat/frameworks/blacksheep_app/app.py | 182 | except Exception: | CODE |
| LOW | …asgi_framework_compat/frameworks/blacksheep_app/app.py | 194 | except Exception: | CODE |
| LOW | tests/docker/per_app_allocation/app.py | 83 | except Exception as e: | CODE |
| LOW⚡ | …s/docker/asgi_compliance/test_framework_integration.py | 161 | except Exception as e: | CODE |
| LOW⚡ | …s/docker/asgi_compliance/test_framework_integration.py | 324 | except Exception as e: | CODE |
| LOW | …s/docker/asgi_compliance/test_framework_integration.py | 139 | except Exception: | CODE |
| LOW | …s/docker/asgi_compliance/test_framework_integration.py | 302 | except Exception: | CODE |
| LOW | tests/docker/asgi_compliance/apps/framework_apps.py | 150 | except Exception: | CODE |
| LOW⚡ | tests/docker/asgi_compliance/apps/framework_apps.py | 293 | except Exception: | CODE |
| LOW | tests/docker/asgi_compliance/apps/streaming_app.py | 335 | except Exception: | CODE |
| LOW | tests/docker/dirty_ttin_ttou/app.py | 58 | except Exception as e: | CODE |
| LOW | tests/docker/dirty_ttin_ttou/app.py | 69 | except Exception as e: | CODE |
| LOW | gunicorn/pidfile.py | 61 | except Exception: | CODE |
| LOW | gunicorn/util.py | 103 | except Exception: | CODE |
| LOW | gunicorn/util.py | 122 | except Exception: | CODE |
| LOW | gunicorn/util.py | 131 | except Exception: | CODE |
| LOW | gunicorn/util.py | 504 | except Exception: | CODE |
| MEDIUM | gunicorn/util.py | 223 | def unlink(filename): | CODE |
| LOW | gunicorn/systemd.py | 71 | except Exception: | CODE |
| MEDIUM | gunicorn/arbiter.py | 133 | print("Error: restoring the previous logger " | CODE |
| LOW | gunicorn/arbiter.py | 121 | except Exception: | CODE |
| LOW | gunicorn/arbiter.py | 132 | except Exception: | CODE |
| LOW | gunicorn/arbiter.py | 281 | except Exception: | CODE |
| LOW | gunicorn/arbiter.py | 483 | except Exception: | CODE |
| LOW | gunicorn/arbiter.py | 762 | except Exception as e: | CODE |
| LOW | gunicorn/arbiter.py | 774 | except Exception: | CODE |
| LOW | gunicorn/arbiter.py | 919 | except Exception: | CODE |
| LOW | gunicorn/arbiter.py | 1023 | except Exception as e: | CODE |
| LOW | gunicorn/arbiter.py | 1034 | except Exception as e: | CODE |
| LOW | gunicorn/glogging.py | 383 | except Exception: | CODE |
| LOW | gunicorn/asgi/protocol.py | 779 | except Exception as e: | CODE |
| LOW | gunicorn/asgi/protocol.py | 909 | except Exception: | CODE |
| LOW | gunicorn/asgi/protocol.py | 1083 | except Exception as e: | CODE |
| LOW | gunicorn/asgi/protocol.py | 1385 | except Exception: | CODE |
| LOW | gunicorn/asgi/protocol.py | 1413 | except Exception: | CODE |
| LOW | gunicorn/asgi/protocol.py | 1790 | except Exception: | CODE |
| LOW | gunicorn/asgi/protocol.py | 1866 | except Exception as e: | CODE |
| LOW | gunicorn/asgi/protocol.py | 1885 | except Exception as e: | CODE |
| LOW | gunicorn/asgi/protocol.py | 1892 | except Exception: | CODE |
| LOW | gunicorn/asgi/protocol.py | 1947 | except Exception as e: | CODE |
| LOW | gunicorn/asgi/protocol.py | 1951 | except Exception: | CODE |
| LOW | gunicorn/asgi/protocol.py | 2204 | except Exception: | CODE |
| 122 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_gtornado.py | 440 | CODE | |
| LOW | tests/test_asgi_worker.py | 75 | CODE | |
| LOW | tests/test_dirty_integration.py | 194 | CODE | |
| LOW | tests/test_dirty_integration.py | 285 | CODE | |
| LOW | tests/docker/asgi/app.py | 8 | CODE | |
| LOW | tests/docker/asgi_framework_compat/conftest.py | 57 | CODE | |
| LOW | …/docker/asgi_framework_compat/scripts/generate_grid.py | 79 | CODE | |
| LOW | …er/asgi_framework_compat/frameworks/django_app/asgi.py | 32 | CODE | |
| LOW | …gi_framework_compat/frameworks/django_app/consumers.py | 9 | CODE | |
| LOW | …r/asgi_framework_compat/frameworks/django_app/views.py | 17 | CODE | |
| LOW | …/asgi_framework_compat/frameworks/starlette_app/app.py | 46 | CODE | |
| LOW | …/asgi_framework_compat/frameworks/starlette_app/app.py | 66 | CODE | |
| LOW | …er/asgi_framework_compat/frameworks/fastapi_app/app.py | 42 | CODE | |
| LOW | …er/asgi_framework_compat/frameworks/fastapi_app/app.py | 62 | CODE | |
| LOW | …r/asgi_framework_compat/frameworks/litestar_app/app.py | 40 | CODE | |
| LOW | …asgi_framework_compat/frameworks/blacksheep_app/app.py | 42 | CODE | |
| LOW | …cker/asgi_framework_compat/frameworks/quart_app/app.py | 40 | CODE | |
| LOW | tests/docker/dirty_arbiter/test_parent_death.py | 132 | CODE | |
| LOW | tests/docker/dirty_arbiter/test_parent_death.py | 500 | CODE | |
| LOW | tests/docker/per_app_allocation/test_per_app_e2e.py | 101 | CODE | |
| LOW | tests/docker/per_app_allocation/test_per_app_e2e.py | 137 | CODE | |
| LOW | tests/docker/per_app_allocation/app.py | 21 | CODE | |
| LOW | tests/docker/http2/conftest.py | 49 | CODE | |
| LOW | tests/docker/http2/app.py | 10 | CODE | |
| LOW | tests/docker/test_asgi_uwsgi/app.py | 8 | CODE | |
| LOW | tests/docker/uwsgi/app.py | 15 | CODE | |
| LOW | tests/docker/asgi_compliance/conftest.py | 62 | CODE | |
| LOW | tests/docker/asgi_compliance/conftest.py | 290 | CODE | |
| LOW | tests/docker/asgi_compliance/conftest.py | 308 | CODE | |
| LOW | …ts/docker/asgi_compliance/test_streaming_compliance.py | 93 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/lifespan_app.py | 28 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/lifespan_app.py | 53 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/websocket_app.py | 15 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/websocket_app.py | 68 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/websocket_app.py | 100 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/websocket_app.py | 259 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/websocket_app.py | 377 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/framework_apps.py | 47 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/framework_apps.py | 304 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/http_app.py | 16 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/http_app.py | 309 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/http_app.py | 489 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/http_app.py | 537 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/streaming_app.py | 17 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/streaming_app.py | 106 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/streaming_app.py | 205 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/streaming_app.py | 249 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/streaming_app.py | 293 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/streaming_app.py | 380 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/main_app.py | 29 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/main_app.py | 98 | CODE | |
| LOW | tests/docker/dirty_ttin_ttou/test_ttin_ttou_docker.py | 106 | CODE | |
| LOW | tests/docker/stress/conftest.py | 91 | CODE | |
| LOW | tests/docker/stress/apps/stress_app.py | 257 | CODE | |
| LOW | tests/support/uwsgi_asgi_app.py | 4 | CODE | |
| LOW | tests/ctl/test_server.py | 328 | CODE | |
| LOW | gunicorn/pidfile.py | 64 | CODE | |
| LOW | gunicorn/reloader.py | 54 | CODE | |
| LOW | gunicorn/util.py | 88 | CODE | |
| LOW | gunicorn/util.py | 521 | CODE | |
| 94 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | gunicorn/asgi/uwsgi.py | 67 | Parse a uWSGI request asynchronously. Args: cfg: gunicorn config object unreader: Async | STRING |
| HIGH | gunicorn/http2/async_connection.py | 197 | Receive data and return completed requests. Args: timeout: Optional timeout in seconds for read ope | STRING |
| HIGH | gunicorn/http2/async_connection.py | 728 | Send trailing headers on a stream. Trailers are headers sent after the response body, commonly used for | STRING |
| HIGH | gunicorn/http2/connection.py | 202 | Process received data and return new requests. A request is returned as soon as its headers are in; its body is | STRING |
| HIGH | gunicorn/http2/connection.py | 653 | Send a response on a stream. Args: stream_id: The stream ID to respond on status: HTTP | STRING |
| HIGH | gunicorn/http2/connection.py | 817 | Send trailing headers on a stream. Trailers are headers sent after the response body, commonly used for | STRING |
| HIGH | gunicorn/dirty/worker.py | 451 | Execute an action on a dirty app. The action runs in a thread pool executor to avoid blocking the | STRING |
| HIGH | gunicorn/dirty/protocol.py | 132 | Decode the 16-byte message header. Args: data: 16 bytes of header data Returns: | STRING |
| HIGH | gunicorn/dirty/protocol.py | 360 | Decode a complete message (header + payload). Args: data: Complete message bytes | STRING |
| HIGH | gunicorn/dirty/protocol.py | 409 | Read a complete binary message from async stream. Args: reader: asyncio StreamReader | STRING |
| HIGH | gunicorn/dirty/protocol.py | 493 | Receive exactly n bytes from a socket. Args: sock: Socket to read from n: Numb | STRING |
| HIGH | gunicorn/dirty/protocol.py | 521 | Read a complete message from socket (sync). Args: sock: Socket to read from Retur | STRING |
| HIGH | gunicorn/dirty/client.py | 81 | Execute an action on a dirty app (sync/blocking). Args: app_path: Import path of the dirty | STRING |
| HIGH | gunicorn/dirty/client.py | 139 | Stream results from a dirty app action (sync). This method returns an iterator that yields chunks from | STRING |
| HIGH | gunicorn/dirty/client.py | 224 | Execute an action on a dirty app (async/non-blocking). Args: app_path: Import path of the | STRING |
| HIGH | gunicorn/dirty/client.py | 280 | Stream results from a dirty app action (async). This method returns an async iterator that yields chun | STRING |
| HIGH | gunicorn/dirty/tlv.py | 54 | Encode a Python value to TLV binary format. Args: value: Python value to encode (None, boo | STRING |
| HIGH | gunicorn/dirty/tlv.py | 129 | Decode a TLV-encoded value from binary data. Args: data: Binary data to decode | STRING |
| HIGH | gunicorn/dirty/tlv.py | 285 | Decode a complete TLV-encoded value, ensuring all data is consumed. Args: data: Binary dat | STRING |
| HIGH | gunicorn/dirty/app.py | 111 | Handle a request from an HTTP worker. Args: action: The action/method name to execute | STRING |
| HIGH | gunicorn/dirty/app.py | 141 | Parse a dirty app specification. Supports two formats: - ``"module:Class"`` - standard format, all workers | STRING |
| HIGH | gunicorn/dirty/app.py | 216 | Load a dirty app class from an import path. Args: import_path: String in format 'module.path:ClassName | STRING |
| HIGH | gunicorn/dirty/app.py | 282 | Load multiple dirty apps from a list of import paths. Args: import_paths: List of import path strings | STRING |
| HIGH | gunicorn/dirty/app.py | 301 | Get the workers class attribute from a dirty app without instantiating it. This is used by the arbiter to dete | STRING |
| HIGH | gunicorn/ctl/protocol.py | 79 | Read one message from a socket. Args: sock: Socket to read from Returns: | STRING |
| HIGH | gunicorn/ctl/client.py | 75 | Send command and wait for response. Args: command: Command string (e.g., "show workers") | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_http2_alpn.py | 312 | CODE | |
| LOW | tests/test_http2_alpn.py | 336 | CODE | |
| LOW | tests/test_dirty_errors.py | 7 | CODE | |
| LOW | tests/test_asgi_forwarded_headers.py | 14 | CODE | |
| LOW | tests/test_asgi_streaming.py | 14 | CODE | |
| LOW | tests/test_http2_live.py | 36 | CODE | |
| LOW | tests/test_asgi_connection_close.py | 18 | CODE | |
| LOW | tests/test_dirty_arbiter.py | 10 | CODE | |
| LOW | tests/test_dirty_tlv.py | 11 | CODE | |
| LOW | tests/test_dirty_tlv.py | 11 | CODE | |
| LOW | tests/test_dirty_tlv.py | 11 | CODE | |
| LOW | tests/test_asgi_parser_validation.py | 13 | CODE | |
| LOW | tests/test_dirty_integration.py | 8 | CODE | |
| LOW | tests/test_uwsgi.py | 5 | CODE | |
| LOW | tests/test_uwsgi.py | 11 | CODE | |
| LOW | tests/test_asgi_keepalive_pipeline.py | 13 | CODE | |
| LOW | tests/test_asgi_keepalive_pipeline.py | 26 | CODE | |
| LOW | tests/test_http2_connection.py | 979 | CODE | |
| LOW | tests/test_http2_h2c.py | 28 | CODE | |
| LOW | tests/test_asgi_protocol_http.py | 14 | CODE | |
| LOW | tests/test_asgi_protocol_http.py | 17 | CODE | |
| LOW | tests/test_asgi_protocol_http.py | 17 | CODE | |
| LOW | tests/test_dirty_stash.py | 7 | CODE | |
| LOW | tests/test_dirty_stash.py | 9 | CODE | |
| LOW | tests/test_control_socket_integration.py | 17 | CODE | |
| LOW | tests/test_control_socket_integration.py | 225 | CODE | |
| LOW | tests/test_http2_async_connection.py | 998 | CODE | |
| LOW | tests/test_dirty_worker.py | 15 | CODE | |
| LOW | tests/test_dirty_worker.py | 25 | CODE | |
| LOW | tests/docker/asgi_framework_compat/conftest.py | 8 | CODE | |
| LOW | tests/docker/asgi_framework_compat/conftest.py | 9 | CODE | |
| LOW | …s/docker/asgi_framework_compat/tests/test_streaming.py | 7 | CODE | |
| LOW | …er/asgi_framework_compat/tests/test_websocket_scope.py | 11 | CODE | |
| LOW | …er/asgi_framework_compat/tests/test_websocket_scope.py | 14 | CODE | |
| LOW | …/docker/asgi_framework_compat/scripts/generate_grid.py | 10 | CODE | |
| LOW | …asgi_framework_compat/frameworks/blacksheep_app/app.py | 11 | CODE | |
| LOW | …cker/asgi_framework_compat/frameworks/quart_app/app.py | 12 | CODE | |
| LOW | tests/docker/dirty_arbiter/test_parent_death.py | 27 | CODE | |
| LOW | tests/docker/per_app_allocation/test_per_app_e2e.py | 27 | CODE | |
| LOW | tests/docker/asgi_compliance/test_concurrency.py | 12 | CODE | |
| LOW | tests/docker/asgi_compliance/apps/framework_apps.py | 13 | CODE | |
| LOW | tests/docker/dirty_ttin_ttou/test_ttin_ttou_docker.py | 7 | CODE | |
| LOW | tests/requests/valid/compat_obs_fold.py | 5 | CODE | |
| LOW | tests/dirty/test_worker_streaming.py | 8 | CODE | |
| LOW | tests/dirty/test_worker_streaming.py | 13 | CODE | |
| LOW | tests/dirty/test_worker_streaming.py | 13 | CODE | |
| LOW | tests/dirty/test_worker_streaming.py | 13 | CODE | |
| LOW | tests/dirty/test_client_streaming_async.py | 8 | CODE | |
| LOW | tests/dirty/test_client_streaming_async.py | 11 | CODE | |
| LOW | tests/dirty/test_arbiter_streaming.py | 8 | CODE | |
| LOW | tests/dirty/test_client_streaming.py | 7 | CODE | |
| LOW | tests/dirty/test_client_streaming.py | 8 | CODE | |
| LOW | tests/dirty/test_client_streaming.py | 10 | CODE | |
| LOW | tests/dirty/test_client_streaming.py | 12 | CODE | |
| LOW | tests/dirty/test_client_streaming.py | 12 | CODE | |
| LOW | tests/dirty/test_client_streaming.py | 22 | CODE | |
| LOW | tests/dirty/test_multi_app_routing.py | 13 | CODE | |
| LOW | tests/dirty/test_streaming_integration.py | 13 | CODE | |
| LOW | tests/dirty/test_streaming_integration.py | 14 | CODE | |
| LOW | tests/dirty/test_streaming_integration.py | 19 | CODE | |
| 53 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_http2_integration.py | 13 | # Check if h2 is available | COMMENT |
| LOW | tests/test_http2_connection.py | 14 | # Check if h2 is available for integration tests | COMMENT |
| LOW | tests/test_http2_h2c.py | 19 | # Check if h2 is available | COMMENT |
| LOW | tests/test_early_hints.py | 12 | # Check if h2 is available for HTTP/2 tests | COMMENT |
| LOW | tests/test_http2_async_connection.py | 15 | # Check if h2 is available for integration tests | COMMENT |
| LOW | tests/docker/asgi_framework_compat/conftest.py | 99 | # Check if containers are already running | COMMENT |
| LOW | …ker/asgi_framework_compat/tests/test_lifespan_scope.py | 47 | # Increment once | COMMENT |
| LOW⚡ | …ker/asgi_framework_compat/tests/test_lifespan_scope.py | 91 | # Increment counter | COMMENT |
| LOW | tests/docker/dirty_arbiter/test_parent_death.py | 198 | # Check if it's actually docker-init by checking its children | COMMENT |
| LOW | tests/docker/http2/conftest.py | 92 | # Check if Docker is available | COMMENT |
| LOW | tests/docker/http2/conftest.py | 102 | # Check if docker compose is available | COMMENT |
| LOW | tests/docker/asgi_compliance/conftest.py | 99 | # Check if Docker is available | COMMENT |
| LOW | tests/docker/asgi_compliance/conftest.py | 109 | # Check if docker compose is available | COMMENT |
| LOW | tests/workers/test_gevent_import_order.py | 61 | # Check if concurrent.futures is now imported | COMMENT |
| LOW | tests/workers/test_gevent_import_order.py | 112 | # Check if the lock is a gevent lock | COMMENT |
| LOW | tests/workers/test_gevent_import_order.py | 172 | # Check if the lock is a gevent lock | COMMENT |
| LOW | gunicorn/sock.py | 257 | # Check if h2 library is available | COMMENT |
| LOW | gunicorn/arbiter.py | 596 | # Check if all remaining workers are newer than last_worker_age | COMMENT |
| LOW | gunicorn/arbiter.py | 854 | # Check if process exists | COMMENT |
| LOW | gunicorn/asgi/protocol.py | 427 | # Check if HTTP/2 was negotiated via ALPN | COMMENT |
| LOW | gunicorn/asgi/protocol.py | 1251 | # Check if Content-Length or Transfer-Encoding is present | COMMENT |
| LOW | gunicorn/asgi/parser.py | 406 | # Check if we have the complete header | COMMENT |
| LOW | gunicorn/http/message.py | 503 | # Check if fast parser should be used | COMMENT |
| LOW | gunicorn/dirty/worker.py | 349 | # Check if result is a generator (streaming) | COMMENT |
| LOW | gunicorn/dirty/stash.py | 362 | # Check if key actually exists with None value | COMMENT |
| LOW | gunicorn/dirty/arbiter.py | 388 | # Check if parent (main arbiter) died unexpectedly | COMMENT |
| LOW | gunicorn/workers/base_async.py | 47 | # Check if HTTP/2 was negotiated (for SSL connections) | COMMENT |
| LOW | gunicorn/workers/gasgi.py | 205 | # Check if parent is still alive | COMMENT |
| LOW | gunicorn/workers/gthread.py | 81 | # Check if HTTP/2 was negotiated via ALPN | COMMENT |
| LOW | gunicorn/workers/gthread.py | 415 | # Check if we can accept more connections | COMMENT |
| LOW | gunicorn/uwsgi/message.py | 63 | # Check if the source IP is allowed | COMMENT |
| LOW | examples/http2_gevent/generate_certs.sh | 17 | # Check if certificates already exist | COMMENT |
| LOW | examples/http2_gevent/test_http2_gevent.py | 297 | # Check if pytest is available | COMMENT |
| LOW | examples/celery_alternative/run_tests.sh | 24 | # Check if integration tests should run | COMMENT |
| LOW | benchmarks/http_parser_benchmark.py | 23 | # Check if fast parser is available | COMMENT |
| LOW | benchmarks/http_parser_benchmark.py | 202 | # Print results | COMMENT |
| LOW | scripts/run_docker_tests.sh | 18 | # Set PYTEST to choose the runner, e.g. PYTEST=".venv/bin/python -m pytest". | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | appveyor.yml | 1 | version: '{branch}.{build}' | COMMENT |
| LOW | appveyor.yml | 21 | #- TOXENV: py38 | COMMENT |
| LOW | tests/config/__init__.py | 1 | # | COMMENT |
| LOW | …sts/invalid/rfc9112_target_authority_non_connect_01.py | 1 | # | COMMENT |
| LOW | …/requests/invalid/rfc9110_trailer_forbidden_host_01.py | 1 | # | COMMENT |
| LOW | …sts/requests/invalid/rfc9110_field_value_ctl_del_01.py | 1 | # | COMMENT |
| LOW | …ts/requests/invalid/rfc9110_trailer_forbidden_cl_01.py | 1 | # | COMMENT |
| LOW | …ests/invalid/rfc9112_target_asterisk_non_options_01.py | 1 | # | COMMENT |
| LOW | …ts/requests/invalid/rfc9110_trailer_forbidden_te_01.py | 1 | # | COMMENT |
| LOW | tests/requests/invalid/rfc9112_target_relative_01.py | 1 | # | COMMENT |
| LOW | …/requests/invalid/rfc9112_chunked_size_plus_sign_01.py | 1 | # | COMMENT |
| LOW | …ts/requests/invalid/rfc9112_smuggle_cl_list_form_01.py | 1 | # | COMMENT |
| LOW | …sts/requests/invalid/rfc9110_field_value_ctl_bel_01.py | 1 | # | COMMENT |
| LOW | …s/requests/invalid/rfc9112_smuggle_cl_te_chunked_01.py | 1 | # | COMMENT |
| LOW | tests/workers/__init__.py | 1 | # | COMMENT |
| LOW | tests/ctl/__init__.py | 1 | # | COMMENT |
| LOW | gunicorn/util.py | 561 | fd_null = os.open(REDIRECT_TO, os.O_RDWR) | COMMENT |
| LOW | gunicorn/util.py | 581 | # | COMMENT |
| LOW | gunicorn/app/__init__.py | 1 | # | COMMENT |
| LOW | gunicorn/instrument/__init__.py | 1 | # | COMMENT |
| LOW | gunicorn/http/message.py | 881 | if not 3 <= len(bits[0]) <= 20: | COMMENT |
| LOW | gunicorn/workers/gthread.py | 481 | req = None | COMMENT |
| LOW | examples/alt_spec.py | 1 | # | COMMENT |
| LOW | examples/multiapp.py | 1 | # | COMMENT |
| LOW | examples/standalone_app.py | 1 | # | COMMENT |
| LOW | examples/readline_app.py | 1 | # | COMMENT |
| LOW | examples/example_config.py | 1 | # | COMMENT |
| LOW | examples/example_config.py | 21 | # Must be a positive integer. Generally set in the 64-2048 | COMMENT |
| LOW | examples/example_config.py | 41 | # https://gunicorn.org/design/#choosing-a-worker-type | COMMENT |
| LOW | examples/example_config.py | 61 | # higher if you're sure of the repercussions for sync workers. | COMMENT |
| LOW | examples/example_config.py | 81 | # nuclear option. | COMMENT |
| LOW | examples/example_config.py | 101 | # | COMMENT |
| LOW | examples/example_config.py | 141 | # Logging | COMMENT |
| LOW | examples/example_config.py | 161 | # that Gunicorn processes are reported in the system process | COMMENT |
| LOW | examples/streaming_chat/__init__.py | 1 | # | COMMENT |
| LOW | examples/http2_features/__init__.py | 1 | # | COMMENT |
| LOW | examples/http2_gevent/docker-compose.yml | 1 | # HTTP/2 with Gevent Docker Compose | COMMENT |
| LOW | examples/deep/__init__.py | 1 | # | COMMENT |
| LOW | examples/dirty_example/__init__.py | 1 | # | COMMENT |
| LOW | examples/embedding_service/__init__.py | 1 | # | COMMENT |
| LOW | examples/frameworks/django/testing/testing/__init__.py | 1 | # | COMMENT |
| LOW | examples/frameworks/django/testing/testing/settings.py | 61 | COMMENT | |
| LOW | …les/frameworks/django/testing/testing/apps/__init__.py | 1 | # | COMMENT |
| LOW | …ameworks/django/testing/testing/apps/someapp/models.py | 1 | # | COMMENT |
| LOW | …eworks/django/testing/testing/apps/someapp/__init__.py | 1 | # | COMMENT |
| LOW | examples/celery_alternative/docker-compose.yml | 61 | # - redis | COMMENT |
| LOW | examples/celery_alternative/tests/__init__.py | 1 | # | COMMENT |
| LOW | scripts/update_thanks.py | 1 | # | COMMENT |
| LOW | scripts/run_docker_tests.sh | 1 | #!/bin/sh | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | tests/test_http2_integration.py | 0 | real gunicorn configuration with the http/2 defaults these tests want. http2request applies the same header policy as ht | STRING |
| HIGH | tests/test_http2_connection.py | 0 | real gunicorn configuration with the http/2 defaults these tests want. http2request applies the same header policy as ht | STRING |
| HIGH | tests/test_http2_async_connection.py | 0 | real gunicorn configuration with the http/2 defaults these tests want. http2request applies the same header policy as ht | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | gunicorn/debug.py | 13 | __all__ = ['spew', 'unspew'] | CODE |
| LOW | gunicorn/asgi/__init__.py | 24 | __all__ = ['AsyncUnreader', 'LifespanManager'] | CODE |
| LOW | gunicorn/http2/async_connection.py | 949 | __all__ = ['AsyncHTTP2Connection'] | CODE |
| LOW | gunicorn/http2/request.py | 376 | __all__ = ['HTTP2Request', 'HTTP2Body'] | CODE |
| LOW | gunicorn/http2/__init__.py | 80 | __all__ = [ | CODE |
| LOW | gunicorn/http2/stream.py | 437 | __all__ = ['HTTP2Stream', 'StreamState'] | CODE |
| LOW | gunicorn/http2/connection.py | 991 | __all__ = ['HTTP2ServerConnection'] | CODE |
| LOW | gunicorn/http2/errors.py | 149 | __all__ = [ | CODE |
| LOW | gunicorn/http/__init__.py | 36 | __all__ = ['Message', 'Request', 'RequestParser', 'get_parser'] | CODE |
| LOW | gunicorn/dirty/__init__.py | 54 | __all__ = [ | CODE |
| LOW | gunicorn/uwsgi/__init__.py | 14 | __all__ = [ | CODE |
| LOW | gunicorn/ctl/__init__.py | 16 | __all__ = ['ControlSocketServer', 'ControlClient', 'ControlProtocol'] | CODE |
| LOW | examples/websocket/gevent_websocket.py | 19 | logger = logging.getLogger(__name__) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_asgi_compliance.py | 1022 | # Step 1: App reads the body | COMMENT |
| LOW⚡ | tests/test_asgi_compliance.py | 1031 | # Step 2: App would send response here (simulated) | COMMENT |
| LOW⚡ | tests/test_asgi_compliance.py | 1034 | # Step 3: App starts listening for disconnect (like Django does) | COMMENT |
| LOW⚡ | tests/workers/test_gevent_import_order.py | 223 | # Step 1: User starts gunicorn - gunicorn.arbiter gets imported | COMMENT |
| LOW⚡ | tests/workers/test_gevent_import_order.py | 227 | # Step 2: Verify concurrent.futures was NOT imported yet | COMMENT |
| LOW⚡ | tests/workers/test_gevent_import_order.py | 231 | # Step 3: Now user's config file runs with monkey.patch_all() | COMMENT |
| LOW⚡ | tests/workers/test_gevent_import_order.py | 236 | # Step 4: Now import concurrent.futures (after patching) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | tests/test_asgi_compliance.py | 1022 | # Step 1: App reads the body | COMMENT |
| LOW⚡ | tests/test_asgi_compliance.py | 1031 | # Step 2: App would send response here (simulated) | COMMENT |
| LOW⚡ | tests/test_asgi_compliance.py | 1034 | # Step 3: App starts listening for disconnect (like Django does) | COMMENT |
| LOW⚡ | tests/workers/test_gevent_import_order.py | 223 | # Step 1: User starts gunicorn - gunicorn.arbiter gets imported | COMMENT |
| LOW⚡ | tests/workers/test_gevent_import_order.py | 227 | # Step 2: Verify concurrent.futures was NOT imported yet | COMMENT |
| LOW⚡ | tests/workers/test_gevent_import_order.py | 231 | # Step 3: Now user's config file runs with monkey.patch_all() | COMMENT |
| LOW⚡ | tests/workers/test_gevent_import_order.py | 236 | # Step 4: Now import concurrent.futures (after patching) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | examples/asgi/websocket_app.py | 191 | let ws = null; | CODE |
| HIGH | examples/asgi/websocket_app.py | 210 | ws.onclose = () => { log('Disconnected', 'error'); ws = null; }; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | gunicorn/errors.py | 12 | # we inherit from BaseException here to make sure to not be caught | COMMENT |
| MEDIUM | gunicorn/instrument/statsd.py | 112 | # you can use those directly if you want | COMMENT |
| MEDIUM | examples/streaming_chat/chat_app.py | 43 | "Here's a simple example:\n\n" | CODE |
| LOW | examples/frameworks/django/testing/testing/settings.py | 76 | # Don't forget to use absolute paths, not relative paths. | COMMENT |
| LOW | examples/frameworks/django/testing/testing/settings.py | 129 | # Don't forget to use absolute paths, not relative paths. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_http2_h2c.py | 382 | def handle_request(self, listener_name, req, sock, addr): | CODE |
| LOW⚡ | gunicorn/dirty/worker.py | 315 | async def handle_request(self, message, writer): | CODE |
| LOW | gunicorn/workers/sync.py | 168 | def handle_request(self, listener, req, client, addr): | CODE |
| LOW⚡ | gunicorn/workers/base_async.py | 311 | def handle_request(self, listener_name, req, sock, addr): | CODE |
| LOW | gunicorn/workers/gtornado.py | 39 | def handle_request(self): | CODE |
| LOW | gunicorn/workers/ggevent.py | 122 | def handle_request(self, listener_name, req, sock, addr): | CODE |
| LOW | gunicorn/workers/gthread.py | 715 | def handle_request(self, req, conn): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/docker/asgi_framework_compat/docker-compose.yml | 4 | # Usage: | COMMENT |
| LOW | tests/docker/asgi_framework_compat/scripts/run_tests.sh | 4 | # Usage: | COMMENT |
| LOW | examples/readline_app.py | 7 | # Usage: | COMMENT |
| LOW | examples/http2_gevent/docker-compose.yml | 3 | # Usage: | COMMENT |
| LOW | scripts/run_docker_tests.sh | 14 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/docker/asgi_compliance/test_http2_asgi.py | 345 | CODE | |
| LOW | gunicorn/asgi/parser.py | 145 | CODE | |
| LOW | gunicorn/http/message.py | 649 | CODE | |
| LOW | examples/dirty_example/dirty_app.py | 102 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/docker/asgi_framework_compat/README.md | 73 | ├── docker-compose.yml # Container orchestration | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/dirty/test_worker_streaming.py | 333 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/test_http.py | 195 | fake_sock = t.FakeSocket(io.BytesIO(b'Lorem ipsum dolor')) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | tests/test_arbiter.py | 175 | """Set the 'preload_app' and 'raw_env' settings in order to verify their | STRING |