PyPI / celery / 5.7.0rc1

celery 5.7.0rc1

Source
https://github.com/celery/celery
Tag scanned
v5.7.0rc1
Compared with
v5.7.0b1 (0 signals introduced since)
Files
771 scanned, 51 skipped (binary, oversized, or unrecognised)
Signals
1 critical · 0 warn · 39 info
Scan time
31.8 s
LLM review
Reviewed by claude-haiku-5-5 (Anthropic): 33 of 33 warn and critical signals; 32 demoted to info.
Disclude version
4.0.0
Scanned (UTC)
2026-10-19 03:26

Signals

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

  1. critical builtins-write celery/__init__.py:68:5

    `builtins.__import__ = ...` — patches a built-in for every importer of this module (ast pass, confidence 0.95)

            return real_import(name, locals, globals, fromlist, level)
        builtins.__import__ = debug_import
    
    if TYPE_CHECKING:
    likely benign LLM, confidence 0.60 Module-level wrapper that replaces builtins.__import__ with a debug_import tracer.
    Reasoning

    Replacing builtins.__import__ is a global side effect and is unusual in a package __init__. The snippet suggests a debug import tracer that wraps the real import, which fits a diagnostic feature, but the gating condition is not shown.

  2. info warn → info by review encoding-base64 CONTRIBUTING.rst:133:5

    base64-like blob (1605 bytes over 26 lines, compression ratio 0.77) (raw pass, confidence 0.60)

    
        mQENBFJpWDkBCADFIc9/Fpgse4owLNvsTC7GYfnJL19XO0hnL99sPx+DPbfr+cSE
        9wiU+Wp2TfUX7pCLEGrODiEP6ZCZbgtiPgId+JYvMxpP6GXbjiIlHRw1EQNH8RlX
        cVxy3rQfVv8PGGiJuyBBjxzvETHW25htVAZ5TI1+CkxmuyyEYqgZN2fNd0wEU19D
    likely benign LLM, confidence 0.90 Base64 block that appears to be an embedded PGP public key in CONTRIBUTING.rst.
    Reasoning

    The base64 blob starts with 'mQENBF', the header of an OpenPGP public key block in a contributing guide. Key material is expected there and is not a payload.

  3. info warn → info by review frame-introspection celery/app/base.py:130:20

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

        """
        frame, level = sys._getframe(1), 1
        while frame is not None and frame_is_celery(frame):
            frame, level = frame.f_back, level + 1
    likely benign LLM, confidence 0.90 Stack walk using sys._getframe to find the first non-celery caller frame.
    Reasoning

    sys._getframe walks up the stack past celery's own frames to locate the caller's module, which is a standard way to name the app automatically.

  4. info unicode-homoglyph celery/canvas.py:330:37

    identifier `сhord` contains homoglyph candidates: с (0441)→c (in string/comment) (raw pass, confidence 0.35)

        def on_chord_header_start(self, sig, **header) -> dict:
            """Method that is called on сhord header stamping start.
    
             Arguments:
  5. info unicode-mixed-script celery/canvas.py:330:37

    identifier `сhord` mixes scripts: Cyrillic + Latin (in string/comment) (raw pass, confidence 0.40)

        def on_chord_header_start(self, sig, **header) -> dict:
            """Method that is called on сhord header stamping start.
    
             Arguments:
  6. info unicode-homoglyph celery/canvas.py:343:37

    identifier `сhord` contains homoglyph candidates: с (0441)→c (in string/comment) (raw pass, confidence 0.35)

        def on_chord_header_end(self, sig, **header) -> None:
            """Method that is called on сhord header stamping end.
    
               Arguments:
  7. info unicode-mixed-script celery/canvas.py:343:37

    identifier `сhord` mixes scripts: Cyrillic + Latin (in string/comment) (raw pass, confidence 0.40)

        def on_chord_header_end(self, sig, **header) -> None:
            """Method that is called on сhord header stamping end.
    
               Arguments:
  8. info warn → info by review frame-introspection celery/contrib/rdb.py:172:9

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

            # this raises a BdbQuit exception that we're unable to catch.
            sys.settrace(None)
    likely benign LLM, confidence 0.90 Clears the trace function in the remote debugger after a session ends.
    Reasoning

    This is the teardown of celery's remote debugger, which uses sys.settrace to stop tracing on exit. It is expected behaviour for a debugger.

  9. info critical → info by review dynamic-import celery/local.py:462:22

    `__import__` called on a non-literal expression (ast pass, confidence 0.70)

            if name in self._object_origins:
                module = __import__(self._object_origins[name], None, None,
                                    [name])
                for item in self._all_by_module[module.__name__]:
    likely benign LLM, confidence 0.90 Lazy attribute loader calling __import__ on a module name from an internal mapping.
    Reasoning

    This is a lazy-loading proxy that imports a module named by an internal mapping of object origins. The module names come from the library's own tables, not untrusted input.

  10. info critical → info by review dynamic-import celery/local.py:468:22

    `__import__` called on a non-literal expression (ast pass, confidence 0.70)

            elif name in self._direct:  # pragma: no cover
                module = __import__(self._direct[name], None, None, [name])
                setattr(self, name, module)
                return module
    likely benign LLM, confidence 0.90 Lazy direct-import helper that calls __import__ on an internal mapping value.
    Reasoning

    Same lazy-loading mechanism as the other local.py finding, importing from the internal _direct mapping of names to modules.

  11. info warn → info by review dynamic-execution celery/utils/functional.py:436:5

    `exec` called on a non-literal expression (ast pass, confidence 0.70)

        # Tasks are rarely, if ever, created at runtime - exec here is fine.
        exec(definition, namespace)
        result = namespace[name]
        result._source = definition
    likely benign LLM, confidence 0.75 Executes a generated function definition in a fresh namespace to create a task object.
    Reasoning

    The exec call builds a task from a definition string, and the comment says it is used for runtime-created tasks. This is a deliberate code-generation utility, though exec of a non-literal is a risky pattern if the input is attacker-controlled.

  12. info warn → info by review decoder-decompress-payload celery/worker/state.py:364:49

    file imports decoder module(s) zlib and calls `.decompress()` — embedded payload decompressed at runtime (ast pass, confidence 0.75)

            if zrevoked:
                self._merge_revoked_v1(pickle.loads(self.decompress(zrevoked)))
    
        def _merge_revoked_v2(self, saved):
    likely benign LLM, confidence 0.70 Loads legacy revoked-task state by zlib-decompressing and unpickling stored data.
    Reasoning

    The code decompresses and unpickles revoked-task state that the worker itself saved to its own persistence store. Pickle on a trusted local store is a known weakness but is consistent with the legacy format handling here.

  13. info warn → info by review encoding-base64 docker/docker-compose.yml:17:103

    base64-like blob (99 bytes, compression ratio 1.05) (raw pass, confidence 0.60)

          AZUREBLOCKBLOB_URL: azureblockblob://DefaultEndpointsProtocol=http;AccountName=devstoreaccount1;AccountKey=Eby8vdM02xNOcqFlqUwJPLlmEtlCDXJ1OUzFT50uSRZ6IFsuFq2UVErCz4I6tq/K1SZFPTOtr/KBHBeksoGMGw==;BlobEndpoint=http://azurite:10000/devstoreaccount1;
          PYTHONPATH: /home/developer/celery
        tty: true
    likely benign LLM, confidence 0.90 Connection string with the public Azurite emulator account key for local dev storage.
    Reasoning

    The embedded key is the well-known public Azurite emulator AccountKey, which is documented and used only for local development.

  14. info critical → info by review dynamic-execution docker/entrypoint:7:1

    `exec` called with a dynamic (variable/substitution) path (ast pass, confidence 0.85)

    
    exec "$@"
    likely benign LLM, confidence 0.95 Docker entrypoint that execs the container's command arguments.
    Reasoning

    exec "$@" is the standard Docker entrypoint idiom that hands control to the container command. It is not a dropper.

  15. info warn → info by review unicode-mixed-script docs/history/changelog-2.3.rst:220:6

    identifier `Cω` mixes scripts: Latin + Greek (raw pass, confidence 0.80)

        adopted from
        `Cω  <http://research.microsoft.com/en-us/um/cambridge/projects/comega/>`_).
    
        It works with all result backends, but the best implementation is
    likely benign LLM, confidence 0.90 Project name Cω, which mixes Latin and Greek letters, in a changelog reference.
    Reasoning

    The Greek omega in 'Cω' is part of the name of Microsoft's Cω project, cited in a changelog. This is a genuine name, not a homoglyph attack.

  16. info warn → info by review dynamic-import extra/generic-init.d/celerybeat:103:5

    `source` called with a dynamic path — sourcing a variable script path (ast pass, confidence 0.75)

        _config_sanity "$EXTRA_CONFIG"
        . "$EXTRA_CONFIG"
    fi
    likely benign LLM, confidence 0.85 Sources the optional EXTRA_CONFIG shell file in the celerybeat init script.
    Reasoning

    This is the standard init-script pattern of sourcing an admin-supplied config file after a sanity check. The path is set by the operator, not by remote input.

  17. info dynamic-execution extra/generic-init.d/celerybeat:249:5

    command name is a variable (`$CELERYBEAT_SU`) that this file sets only to plain text (ast pass, confidence 0.40)

    _chuid () {
        ${CELERYBEAT_SU} ${CELERYBEAT_SU_ARGS} \
            "$CELERYBEAT_USER" -c "$CELERYBEAT $*"
    }
  18. info warn → info by review dynamic-import extra/generic-init.d/celeryd:114:5

    `source` called with a dynamic path — sourcing a variable script path (ast pass, confidence 0.75)

        echo "Using config script: $CELERY_DEFAULTS"
        . "$CELERY_DEFAULTS"
    fi
    likely benign LLM, confidence 0.85 Sources the CELERY_DEFAULTS config file in the celeryd init script.
    Reasoning

    Same as the celerybeat init script: it sources an operator-configured defaults file, which is conventional for Debian-style init scripts.

  19. info dynamic-execution extra/generic-init.d/celeryd:220:5

    command name is a variable (`$CELERYD_MULTI`) that this file sets only to plain text (ast pass, confidence 0.40)

        # note: multi < 3.1.14 output to stderr, not stdout, hence the redirect.
        ${CELERYD_MULTI} expand "${CELERYD_PID_FILE}" ${CELERYD_NODES} 2>&1
    }
  20. info dynamic-execution extra/generic-init.d/celeryd:249:5

    command name is a variable (`$CELERYD_SU`) that this file sets only to plain text (ast pass, confidence 0.40)

    _chuid () {
        ${CELERYD_SU} ${CELERYD_SU_ARGS} "$CELERYD_USER" -c "$CELERYD_MULTI $*"
    }
  21. info warn → info by review decoder-import-with-exec t/unit/app/test_app.py:1526:9

    file imports decoder module(s) pickle and calls `exec`/`eval`/`compile` — multi-stage payload shape (ast pass, confidence 0.80)

            local = {}
            exec(
                'def foo(args: Sequence[str], x: int = 0): return args',
                {'app': None},
    likely benign LLM, confidence 0.85 Test code that execs a small literal function definition in a test namespace.
    Reasoning

    This is a unit test that execs a literal function definition to check signature handling. The pickle import and exec are test scaffolding, not a payload.

  22. info warn → info by review frame-introspection t/unit/backends/test_base.py:590:34

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

            def raise_dummy():
                frame_str_temp = str(inspect.currentframe().__repr__)
                frame_list.append(frame_str_temp)
                raise KeyError('foo')
    likely benign LLM, confidence 0.95 Test helper that reads the current frame to build a string for an assertion.
    Reasoning

    This is a unit test collecting frame repr strings for an error-path check. inspect.currentframe is used only for test assertions.

  23. info critical → info by review builtins-write t/unit/conftest.py:409:5

    `builtins.__import__ = ...` — patches a built-in for every importer of this module (ast pass, confidence 0.95)

    
        builtins.__import__ = myimp
        try:
            yield
    likely benign LLM, confidence 0.93 Test fixture temporarily replaces builtins.__import__ with a custom import hook.
    Reasoning

    The builtins.__import__ replacement is inside a try/yield with a finally that restores the original, which is a standard test fixture for simulating import failures. It is scoped to tests in a Celery test suite and is not persistent.

  24. info critical → info by review builtins-write t/unit/conftest.py:413:9

    `builtins.__import__ = ...` — patches a built-in for every importer of this module (ast pass, confidence 0.95)

        finally:
            builtins.__import__ = realimport
    likely benign LLM, confidence 0.93 Restores the original builtins.__import__ after the test fixture yields.
    Reasoning

    This is the restore step in the finally block of the same fixture, reinstating the saved real import function. It is the cleanup half of a balanced, legitimate test-mocking pattern.

  25. info warn → info by review encoding-base64 t/unit/security/__init__.py:10:1

    base64-like blob (812 bytes over 13 lines, compression ratio 0.79) (raw pass, confidence 0.60)

    KEY1 = """-----BEGIN RSA PRIVATE KEY-----
    MIICXQIBAAKBgQC9Twh0V5q/R1Q8N+Y+CNM4lj9AXeZL0gYowoK1ht2ZLCDU9vN5
    dhV0x3sqaXLjQNeCGd6b2vTbFGdF2E45//IWz6/BdPFWaPm0rtYbcxZHqXDZScRp
    vFDLHhMysdqQWHxXVxpqIXXo4B7bnfnGvXhYwYITeEyQylV/rnH53mdV8wIDAQAB
    likely benign LLM, confidence 0.85 Embedded PEM RSA private key used as test fixture data.
    Reasoning

    The blob is a PEM RSA private key literal in a security serializer test module, consistent with test fixture key material. Raw-pass base64 detection has a high false-positive rate on PEM data, and nothing indicates malicious use.

  26. info warn → info by review encoding-base64 t/unit/security/__init__.py:26:1

    base64-like blob (984 bytes over 16 lines, compression ratio 0.78) (raw pass, confidence 0.60)

    ENCKEY1 = """-----BEGIN ENCRYPTED PRIVATE KEY-----
    MIIC3TBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIfSuXbPVZsP8CAggA
    MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBBP/mVP1cCpfTpoJZuSKRrnBIIC
    gMKyrj4mzdr0xASR4120M3mh56+1dUDvLJl0DwOXD5NGCQfvSgDP0mGSrmIcM6Rh
    likely benign LLM, confidence 0.85 Embedded encrypted PEM private key used as test fixture data.
    Reasoning

    This is an encrypted PEM private key literal in a security test module. It is test fixture material; the raw base64 heuristic flags it because PEM bodies are high-entropy base64.

  27. info warn → info by review encoding-base64 t/unit/security/__init__.py:45:1

    base64-like blob (812 bytes over 13 lines, compression ratio 0.79) (raw pass, confidence 0.60)

    KEY2 = """-----BEGIN RSA PRIVATE KEY-----
    MIICXQIBAAKBgQDH22L8b9AmST9ABDmQTQ2DWMdDmK5YXZt4AIY81IcsTQ/ccM0C
    fwXEP9tdkYwtcxMCWdASwY5pfMy9vFp0hyrRQMSNfuoxAgONuNWPyQoIvY3ZXRe6
    rS+hb/LN4+vdjX+oxmYiQ2HmSB9rh2bepE6Cw+RLJr5sXXq+xZJ+BLt5tQIDAQAB
    likely benign LLM, confidence 0.85 Second embedded PEM RSA private key used as test fixture data.
    Reasoning

    Another RSA PRIVATE KEY PEM literal in the security test module, matching the pattern of the other test key fixtures. The base64-blob signal is a known false positive on PEM content.

  28. info warn → info by review encoding-base64 t/unit/security/__init__.py:61:1

    base64-like blob (984 bytes over 16 lines, compression ratio 0.78) (raw pass, confidence 0.60)

    ENCKEY2 = """-----BEGIN ENCRYPTED PRIVATE KEY-----
    MIIC3TBXBgkqhkiG9w0BBQ0wSjApBgkqhkiG9w0BBQwwHAQIbWgdUR8UE/cCAggA
    MAwGCCqGSIb3DQIJBQAwHQYJYIZIAWUDBAEqBBA50e1NvEUQXLkA44V4wVeOBIIC
    gBt+cRTT+Jqrayj1hSrKgD20mNKz0qo6/JsXwTcHQJLQ91KFWDkAfCYOazzzIlIx
    likely benign LLM, confidence 0.85 Second embedded encrypted PEM private key used as test fixture data.
    Reasoning

    Encrypted PEM private key literal in the security test module, consistent with other fixture keys in the file. The high-entropy base64 flag reflects the PEM encoding, not obfuscation.

  29. info warn → info by review encoding-base64 t/unit/security/__init__.py:80:1

    base64-like blob (804 bytes over 13 lines, compression ratio 0.72) (raw pass, confidence 0.60)

    CERT1 = """-----BEGIN CERTIFICATE-----
    MIICVzCCAcACCQC72PP7b7H9BTANBgkqhkiG9w0BAQUFADBwMQswCQYDVQQGEwJV
    UzELMAkGA1UECBMCQ0ExCzAJBgNVBAcTAlNGMQ8wDQYDVQQKEwZDZWxlcnkxDzAN
    BgNVBAMTBkNFbGVyeTElMCMGCSqGSIb3DQEJARYWY2VydEBjZWxlcnlwcm9qZWN0
    likely benign LLM, confidence 0.85 Embedded X.509 certificate PEM used as test fixture data.
    Reasoning

    A CERTIFICATE PEM literal in a test module for security/signing. Certificates are public data and the blob is ordinary base64 DER encoding.

  30. info warn → info by review encoding-base64 t/unit/security/__init__.py:96:1

    base64-like blob (692 bytes over 11 lines, compression ratio 0.76) (raw pass, confidence 0.60)

    CERT2 = """-----BEGIN CERTIFICATE-----
    MIICATCCAWoCCQCV/9A2ZBM37TANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJB
    VTETMBEGA1UECAwKU29tZS1TdGF0ZTEhMB8GA1UECgwYSW50ZXJuZXQgV2lkZ2l0
    cyBQdHkgTHRkMB4XDTExMDcxOTA5MDkwMloXDTEyMDcxODA5MDkwMlowRTELMAkG
    likely benign LLM, confidence 0.85 Second embedded X.509 certificate PEM used as test fixture data.
    Reasoning

    A second X.509 certificate PEM literal in the same test module. Public certificate data encoded in base64 is expected here and is not obfuscation.

  31. info warn → info by review encoding-base64 t/unit/security/__init__.py:110:1

    base64-like blob (1132 bytes over 18 lines, compression ratio 0.76) (raw pass, confidence 0.60)

    CERT_ECDSA = """-----BEGIN CERTIFICATE-----
    MIIDTTCCATWgAwIBAgIBCTANBgkqhkiG9w0BAQsFADANMQswCQYDVQQGEwJGSTAe
    Fw0yMjA4MDQwOTA5MDlaFw0yNTA0MzAwOTA5MDlaMCMxCzAJBgNVBAYTAkZJMRQw
    EgYDVQQDDAtUZXN0IFNlcnZlcjBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABIZV
    likely benign LLM, confidence 0.85 Embedded ECDSA certificate PEM used as test fixture data.
    Reasoning

    An ECDSA certificate PEM literal in a security test module. Public certificate content flagged by the raw base64 heuristic; there is no execution or decoding logic.

  32. info warn → info by review encoding-base64 t/unit/security/__init__.py:134:1

    base64-like blob (164 bytes over 3 lines, compression ratio 0.94) (raw pass, confidence 0.60)

    -----BEGIN EC PRIVATE KEY-----
    MHcCAQEEIOj98rAhc4ToQkHby+Iegvhm3UBx+3TwpfNza+2Vn8d7oAoGCCqGSM49
    AwEHoUQDQgAEhlUYUzS49td6FPnmzbKrdl3u0K83oYwakTb4pJmpO0M/lzvHbdC8
    FgXqr9Pwws1YJIFPFoRGm+3xcv6Sw5ny9A==
    likely benign LLM, confidence 0.85 Embedded EC private key PEM used as test fixture data.
    Reasoning

    A short EC PRIVATE KEY PEM literal in the security test module, consistent with the other fixtures. It is test key material with no decoding or dropper behavior.

  33. info critical → info by review builtins-write t/unit/security/test_security.py:166:9

    `builtins.__import__ = ...` — patches a built-in for every importer of this module (ast pass, confidence 0.95)

    
            builtins.__import__ = import_hook
            with pytest.raises(ImproperlyConfigured):
                self.app.setup_security()
    likely benign LLM, confidence 0.92 Test temporarily patches builtins.__import__ to exercise an import-failure path.
    Reasoning

    This is the same temporary import-hook pattern used in test fixtures, followed by a pytest.raises check that exercises ImproperlyConfigured. The hook is set up for a test and is presumably restored afterward.

  34. info critical → info by review builtins-write t/unit/security/test_security.py:169:9

    `builtins.__import__ = ...` — patches a built-in for every importer of this module (ast pass, confidence 0.95)

                self.app.setup_security()
            builtins.__import__ = _import
    
        def test_reraise_errors(self):
    likely benign LLM, confidence 0.92 Restores builtins.__import__ after a security test scenario.
    Reasoning

    This restores the original builtins.__import__ after the test scenario, completing the temporary patch. It is cleanup in a test, not persistent tampering.

  35. info warn → info by review frame-introspection t/unit/tasks/test_trace.py:252:34

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

            def raise_dummy():
                frame_str_temp = str(inspect.currentframe().__repr__)
                frame_list.append(frame_str_temp)
                raise KeyError('foo')
    likely benign LLM, confidence 0.93 Test helper reads the current stack frame's repr for trace testing.
    Reasoning

    inspect.currentframe is used in a test helper to capture a frame repr for trace-formatting assertions. This is ordinary introspection in test code with no evasion or exfiltration.

  36. info warn → info by review dynamic-execution t/unit/utils/test_functional.py:405:9

    `exec` called on a non-literal expression (ast pass, confidence 0.70)

                   '    return foo, args, bar')
            exec(fun, {}, local)
    
            g = head_from_fun(local['f'])
    likely benign LLM, confidence 0.85 Test uses exec to build a function from a locally generated source string.
    Reasoning

    exec runs a generated function source string built in the test to construct a callable for head_from_fun testing. The source is locally constructed in a test with an empty globals dict; it is a dynamic-execution pattern but benign in this context.

  37. info warn → info by review dynamic-execution t/unit/utils/test_functional.py:417:9

    `exec` called on a non-literal expression (ast pass, confidence 0.70)

                   '    pass')
            exec(fun, {}, local)
            f_hints = local['f_hints']
    likely benign LLM, confidence 0.90 Test helper that exec's a generated function definition to check signature hint extraction.
    Reasoning

    The exec runs a string that the test builds to define a function with specific argument signatures, then reads the result from a local dict. This is a standard way to test signature introspection in a unit test. The source is a hardcoded test literal, not attacker-controlled input, and nothing in the snippet suggests exfiltration or a payload.

  38. info warn → info by review dynamic-execution t/unit/utils/test_functional.py:430:9

    `exec` called on a non-literal expression (ast pass, confidence 0.70)

                   '    return')
            exec(fun, {}, local)
            f_kwargs = local['f_kwargs']
    likely benign LLM, confidence 0.90 Test code that exec's a generated function to exercise keyword-argument introspection.
    Reasoning

    Same pattern as the neighbouring exec calls: a locally built function source is executed in an isolated namespace so the test can inspect keyword-argument handling. The file is a unit test for functional helpers, and the exec has no network, shell, or encoded-blob behaviour.

  39. info warn → info by review dynamic-execution t/unit/utils/test_functional.py:457:9

    `exec` called on a non-literal expression (ast pass, confidence 0.70)

                   '    return')
            exec(fun, {}, local)
            f_kwargs_required = local['f_kwargs_required']
            g = head_from_fun(f_kwargs_required)
    likely benign LLM, confidence 0.90 Test exec of a generated function with required kwargs to verify head_from_fun behaviour.
    Reasoning

    The exec builds a function with required keyword-only arguments for a test of head_from_fun, then pulls it out of the local namespace. The input is a fixed test string, and the surrounding code is ordinary assertion-driven test logic.

  40. info warn → info by review decoder-decompress-payload t/unit/worker/test_state.py:187:19

    file imports decoder module(s) pickle and calls `.decompress()` — embedded payload decompressed at runtime (ast pass, confidence 0.75)

            assert p.db['zrevoked']
            pickled = p.decompress(p.db['zrevoked'])
            assert pickled
            saved = pickle.loads(pickled)
    likely benign LLM, confidence 0.88 Test code that decompresses and unpickles revoked-task state from its own test database.
    Reasoning

    In a worker-state test, the code reads a value from a shelve-style database under a revoked key, decompresses it, and unpickles it to check round-tripping. The pickle data comes from the test's own persistence store, not from an external or embedded attacker payload. The pattern matches a legitimate serialization test in a task-queue library.

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.0.0
git clone https://github.com/celery/celery celery && cd celery
git checkout v5.7.0rc1
disclude scan --severity info --diff v5.7.0b1 .