PyPI / click / 8.5.0

click 8.5.0

Source
https://github.com/pallets/click
Tag scanned
8.5.0
Compared with
8.4.2 (0 signals introduced since)
Files
119 scanned, 30 skipped (binary, oversized, or unrecognised)
Signals
0 critical · 0 warn · 4 info
Scan time
4.4 s
LLM review
Reviewed by claude-haiku-5-5 (Anthropic): 4 of 4 warn and critical signals; 4 demoted to info.
Disclude version
4.1.0
Scanned (UTC)
2026-10-21 20:58

Signals

Ordered by severity, then signals introduced in this release. Hidden characters are shown as ⟨U+…⟩.

  1. info critical → info by review dynamic-execution docs/shell-completion.md:45:13

    [markup prose] `eval` called on a dynamic (variable/substitution) expression (ast pass, confidence 0.90)

                eval "$(_FOO_BAR_COMPLETE=bash_source foo-bar)"
    likely benign LLM, confidence 0.90 Documentation snippet showing eval of a shell completion script generated by the tool itself.
    Reasoning

    This is Click's documented shell completion setup in a markdown doc; eval of the output of the program's own completion-source command is the standard documented pattern for bash/zsh completion. It is documentation prose, not executed code, and the command is the project's own tool, not a remote payload.

  2. info critical → info by review dynamic-execution docs/shell-completion.md:53:13

    [markup prose] `eval` called on a dynamic (variable/substitution) expression (ast pass, confidence 0.90)

                eval "$(_FOO_BAR_COMPLETE=zsh_source foo-bar)"
    likely benign LLM, confidence 0.90 Documentation snippet showing eval of zsh completion source from the project's own command.
    Reasoning

    Same documented zsh completion pattern as the bash variant; the eval consumes the project's own generated completion source in a markdown file. No network fetch or obfuscation is involved.

  3. info warn → info by review frame-introspection src/click/decorators.py:485:17

    `inspect.currentframe` — call-stack frame introspection (ast pass, confidence 0.70)

        if version is None and package_name is None:
            frame = inspect.currentframe()
            f_back = frame.f_back if frame is not None else None
            f_globals = f_back.f_globals if f_back is not None else None
    likely benign LLM, confidence 0.88 Click's version option uses the caller's frame globals to determine the package name.
    Reasoning

    Click's version decorator uses inspect.currentframe to find the caller's module globals to infer the package name for version lookup. This is a well-known legitimate use of frame introspection in a CLI framework, with no exfiltration or hidden execution.

  4. info warn → info by review frame-introspection tests/test_chain.py:10:12

    `sys._getframe` — call-stack frame introspection (ast pass, confidence 0.70)

        click.echo(
            f"{sys._getframe(1).f_code.co_name}"
            f"={'|'.join(click.get_current_context().args)}"
        )
    likely benign LLM, confidence 0.90 Test helper reading the caller's function name via sys._getframe for output in a chaining test.
    Reasoning

    This is a test file where sys._getframe(1) is used to echo the calling function's name for a chaining test. It is test scaffolding with no malicious behavior.

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.

cargo install disclude --version 4.1.0
git clone https://github.com/pallets/click click && cd click
git checkout 8.5.0
disclude scan --severity info --diff 8.4.2 .