cython 3.3.1
- Source
- https://github.com/cython/cython
- Artifact scanned
cython-3.3.1-py3-none-any.whl- Compared with
cython-3.3.0-py3-none-any.whl(0 signals introduced since)- Files
- 161 scanned, 160 skipped (binary, oversized, or unrecognised)
- Signals
- 0 critical · 0 warn · 26 info
- Scan time
- 19.4 s
- LLM review
- Reviewed by claude-haiku-5-5 (Anthropic): 25 of 25 warn and critical signals; 25 demoted to info.
- Disclude version
- 4.3.0
- Scanned (UTC)
- 2026-11-01 20:27
Signals
Ordered by severity, then signals introduced in this release. Hidden characters are shown as ⟨U+…⟩.
-
= ... =likely benign Cython inline() reads the calling frame's locals and globals when not supplied.Reasoning
Walking caller frames to read locals/globals is the standard way Cython's inline() picks up the calling namespace when none is given; no exfiltration or hidden behavior visible.
-
= ... = ...likely benign Cython inline() defaults namespaces from the calling frame.Reasoning
Same legitimate pattern: fetching caller f_locals/f_globals as defaults for the inline compilation namespace.
-
= ... = =likely benign Cython inline() fills in globals from the caller and caches unbound symbols.Reasoning
Frame-based globals lookup feeding an unbound-symbols cache for inline code; consistent with Cython's inline helper and not malicious.
-
= .__dict__ =likely benign cymeit helper imports an optional user-named module to expose its namespace.Reasoning
Imports a user-specified module name for cymeit benchmarking to access its namespace; the import target is caller-controlled module configuration in a developer tool, not a hidden payload.
-
= =likely benign Cython IPython magic imports and tracks modules for reload.Reasoning
IPython magic reloads a user-requested module by name after an import, a normal development feature of the Cython %%cython magic.
-
likely benign Test teardown restores builtins modified during IPython magic tests.
Reasoning
In a test tearDownClass the code restores builtins it previously patched; setattr on builtins is confined to test setup/teardown and restores original values.
-
= = 1likely benign Cython's Main.compile invokes the Cython compiler on source files.Reasoning
compile here is the Cython compiler's own compile() method on source and options, not Python's builtin exec-style compile; the name collision explains the flag.
-
= assert inlikely benign Options module resolves deprecated option names via globals for validation.Reasoning
Looks up legacy option names in the module's globals for deprecation handling of directive-backed options; a plain configuration check.
-
info
warn→ info by reviewdecoder-import-with-execCython/Debugger/Tests/test_libcython_in_gdb.py:153:21= =likely benign Debugger test evals repr of test objects to verify pickling.Reasoning
Test round-trips an object via repr and eval to check pickle equality of libcython types; the eval input is a repr of test-controlled objects, a testing idiom rather than a payload.
-
info
critical→ info by reviewdynamic-executionCython/Debugger/Tests/test_libcython_in_gdb.py:153:21= =likely benign Debugger test evaluates a constructed libcython expression for a round-trip check.Reasoning
eval of a constructed string is real, but the string is 'libcython.' plus the repr of locally created test instances in a unit test; benign test code, though eval is a flagged construct.
-
info
critical→ info by reviewframe-introspectionCython/Debugger/Tests/test_libcython_in_gdb.py:531:37=likely benign Debug helper logs caller function name via frame introspection.Reasoning
Debug-logging helper reads the caller's function name via sys._getframe when a debug flag is set; the anti-analysis note is triggered only by sys.exit elsewhere in the file, not by evasion here.
-
= =likely benign Test runner dynamically imports a test module by name and collects test classes.Reasoning
Test runner imports a named test module and collects its classes, a standard unittest discovery pattern.
-
= =likely benign Cython debug print walks frames to label output with caller names.Reasoning
Debugging helper walks up the stack to print the calling context for Cython's own debug output; standard for a debug utility.
-
= passlikely benign Tempita templating reads a caller frame to resolve template context.Reasoning
Tempita template engine fetches the caller frame at a given stacklevel to resolve template namespaces; a standard templating feature, with exception handling for shallow stacks.
-
=likely benign Tempita's template expression evaluator calls eval on the expression text inside a template.Reasoning
Tempita is a templating engine that evaluates template expressions by design, using a restricted namespace. The eval is the engine's core function, not a hidden payload. The file is a vendored copy of a well-known library.
-
likely benign Tempita executes template statement code via exec in a supplied namespace.
Reasoning
This exec runs compiled template code in the engine's own namespace, which is how Tempita implements template logic. Nothing in the snippet shows attacker-controlled input reaching it from outside the template being rendered.
-
= = =likely benign The Tempita command-line tool evals a variable value supplied on the command line.Reasoning
This is the command-line handler for Tempita, which evals user-supplied variable values passed with -D options. That is an explicit developer-facing feature run by the person invoking the tool, not a stealth dropper.
-
static CYTHON_INLINE __Pyx_divmod_; /*proto*/dismissed Cython C utility template declaring divmod helper prototypes with templated return types.Reasoning
The snippet is a Cython utility template with {{...}} placeholders. The 'implicit int' heuristic is misfiring on template text where the return type is substituted at code generation, so the real C functions do have return types.
-
static CYTHON_INLINEdismissed Cython complex-number helper template that builds a complex value from real and imaginary parts.Reasoning
The flagged function uses a templated return type {{type}} and templated parameter types, which is standard Cython code generation. It is not legacy K&R C.
-
static CYTHON_INLINE PyObject *dismissed Cython extension-type slot-dispatch template for binary operators.Reasoning
The function signature uses template placeholders such as {{func_name}} and {{slot_type}}, so the heuristic flagged generated-code text. The surrounding code is ordinary CPython extension-type dispatch.
-
.shape = .shape; .strides = .strides;dismissed Cython memoryview template copying shape, stride and suboffset arrays between views.Reasoning
The matches are plain assignments to struct members with templated indices, copying shape and stride arrays. This is ordinary memoryview code, and the implicit-int hit comes from the template syntax.
-
dismissed Cython optimizer template with conditional blocks that generate arithmetic fast paths.
Reasoning
The snippet is Cython Tempita-style conditional directives such as {{if ...}} that select code by operator and type. The flagged names come from template variables, not missing C return types.
-
static CYTHON_INLINE __Pyx_add_; static CYTHON_INLINE __Pyx_sub_;dismissed Cython overflow-checking arithmetic helper prototypes generated for each integer type.Reasoning
These are prototypes for overflow-checking arithmetic helpers, with the type name and return type substituted from {{UINT}} and {{NAME}} placeholders. The implicit-int warning is a false positive on the template source.
-
likely benign Macro aliasing the internal atomic integer type name to int for the non-atomic fallback.
Reasoning
Mapping an internal type name to int through a macro is a standard portability technique for choosing between atomic and non-atomic integer types. It is not a keyword hijack or a sign of obfuscation, and the context is a plain C header.
-
// For standard C/C++ atomics, get the headers first so we have ATOMIC_INT_LOCK_FREElikely benign Macro aliasing the non-atomic integer type name to int in Cython's synchronization utilities.Reasoning
This is the companion macro that aliases the non-atomic integer type to int. It is the same portability pattern as the adjacent definition, with no sign of concealed behaviour.
Reproduce This Scan
Run disclude locally to verify. These commands scan the published file; the "new in this release" marks come from comparing it with the previous release's file, which they don't repeat. Add --format sarif for SARIF output. Add --llm (with an API key in the environment) to include the LLM review.
|