greenlet 3.5.6
- Source
- https://github.com/python-greenlet/greenlet
- Tag scanned
3.5.6- Compared with
3.5.5(0 signals introduced since)- Files
- 107 scanned, 14 skipped (binary, oversized, or unrecognised)
- Signals
- 0 critical · 0 warn · 8 info
- Scan time
- 8.0 s
- LLM review
- Reviewed by claude-haiku-5-5 (Anthropic): 8 of 8 warn and critical signals; 8 demoted to info.
- Disclude version
- 4.0.0
- Scanned (UTC)
- 2026-10-14 18:21
Signals
Ordered by severity, then signals introduced in this release. Hidden characters are shown as ⟨U+…⟩.
-
PyGreenlet* ; ; ;dismissed A debug-build local variable named `main` is initialized from borrow_main_greenlet().Reasoning
The flagged text is a declaration `PyGreenlet* main(state->borrow_main_greenlet());` inside a debug-only #ifndef NDEBUG block. It declares a local variable named main and does not call or recurse into a main function. The rule matched on the identifier name alone, so this is a false positive.
-
= # pylint:disable=protected-accessdismissed A greenlet unit test takes its own frame with sys._getframe(0) to check f_back.Reasoning
sys._getframe(0) in a greenlet test function is used to pass a frame object to the parent and check f_back. This is ordinary test code for the greenlet library and shows no malicious or obfuscated behavior.
-
=dismissed A greenlet test switches a frame object obtained from sys._getframe(0) to another greenlet.Reasoning
The test passes sys._getframe(0) to another greenlet via switch to exercise frame handling across greenlets. This is standard test scaffolding with no sign of malicious intent.
-
dismissed A nested test helper passes its frame via sys._getframe(0) to inner().
Reasoning
The nested outer/inner functions pass sys._getframe(0) between them as part of a greenlet frame test. This is normal introspection in a test suite.
-
# critical sections to get suspendeddismissed A test opens its own source file and reads it without using the contents.Reasoning
The code opens its own __file__ and calls f.read() with the result discarded, next to a comment about critical sections. It is a test that reads its own source for no evident reason, not a payload extractor. The result is never parsed or executed, so this is benign.
-
= returndismissed A tracing test context manager installs itself via sys.setprofile and saves the old profiler.Reasoning
The context manager saves the previous profile function with sys.setprofile and installs itself as the profiler, a standard pattern for testing greenlet tracing. It is not malicious.
-
dismissed A tracing test context manager restores the previous profiler on exit.
Reasoning
__exit__ restores the saved profiler with sys.setprofile(self.oldtrace), which pairs with the __enter__ shown above. This is normal test cleanup.
-
= % =likely benign A version test runs setup.py --version through os.popen using the current interpreter.Reasoning
os.popen runs a command built from sys.executable and the setup.py path to read the package version. The command is constructed at runtime and is unquoted, so paths with spaces could break, but both inputs come from the test environment and no attacker-controlled data reaches it. The critical severity is overstated for this context.
Reproduce This Scan
Run disclude locally to verify. Add --format sarif for SARIF output. Add --llm (with an API key in the environment) to include the LLM review.
&&