joblib 1.6.0
- Source
- https://github.com/joblib/joblib
- Tag scanned
1.6.0- Compared with
1.5.3(1 signals introduced since)- Files
- 115 scanned, 58 skipped (binary, oversized, or unrecognised)
- Signals
- 0 critical · 0 warn · 10 info
- Scan time
- 9.6 s
- LLM review
- Reviewed by claude-haiku-5-5 (Anthropic): 9 of 9 warn and critical signals; 9 demoted to info.
- Disclude version
- 4.1.0
- Scanned (UTC)
- 2026-10-22 05:03
Signals
Ordered by severity, then signals introduced in this release. Hidden characters are shown as ⟨U+…⟩.
-
info
warn→ info by reviewdynamic-executionjoblib/test/test_func_inspect.py:366:5new in this release=likely benign A test builds a function from a literal source string via exec and compile.Reasoning
exec runs compile() on a short literal source string defining a function in a fresh namespace, which is a standard way for a test to create a function whose source is available for inspection. No external input is involved.
-
likely benign A benchmark script calls os.system to drop the page cache before timing runs.
Reasoning
The literal shell command runs `sync` and writes to /proc/sys/vm/drop_caches, a common cache-dropping step in benchmark scripts. It is not obfuscated and has no payload, though it does need sudo, so it is a privileged action worth noting but not malicious in context.
-
= -
# easy vendoring. = .likely benign joblib dynamically imports a module name to get its delete_folder helper.Reasoning
The `__import__` call loads a vendored module by name, with the name computed from the package layout, to import delete_folder. This is a known joblib pattern for vendoring compatibility. The module name is internal, not attacker-controlled, so the critical severity is overstated.
-
= = = b = 0dismissed A streaming zlib decompressor in joblib's compressed file wrapper.Reasoning
zlib.decompressobj is the streaming decompressor behind joblib's compressed-file reader for its own on-disk format. The data it handles is user cache or pickle files, not an embedded payload, so the decoder-plus-decompress heuristic fires on ordinary compression code.
-
# buffer to allocate. = assert == ,likely benign Legacy loader that decompresses a zlib-compressed file and validates its length.Reasoning
zlib.decompress reads a legacy compressed pickle file with a known length, then checks the decompressed length. This is backward-compatibility code for reading older joblib cache files, not a hidden stage of an attack.
-
=likely benign A test executes IPython cell source to check function caching in interactive sessions.Reasoning
The exec and compile calls run IPython cell source in a test that checks how joblib handles interactive-cell functions. The source is test data, and the pickle import is for test fixtures, so the multi-stage shape is a false match.
-
=likely benign Duplicate flag on the test's exec of IPython cell source.Reasoning
This is the same exec(compile(...)) call in the IPython cell test, flagged again by the dynamic-execution signal. The executed text is controlled test data, not untrusted input.
-
likely benign A test compiles IPython cell source for a caching check.
Reasoning
The compile call turns test-provided IPython cell text into code objects with a filename, which the test then executes. It is ordinary test scaffolding for interactive-cell behavior.
-
=likely benign A test helper decompresses a zlib file to create a fixture.Reasoning
A test helper reads a compressed file with zlib.decompress and writes the result to another file, converting fixture formats. The data comes from local test files, not an embedded payload.
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.
&&