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
775 scanned, 47 skipped (binary, oversized, or unrecognised)
Signals
0 critical · 0 warn · 40 info
Scan time
31.9 s
LLM review
Reviewed by claude-haiku-5-5 (Anthropic): 33 of 33 warn and critical signals; 33 demoted to info.
Disclude version
4.1.0
Scanned (UTC)
2026-10-22 09:06

Signals

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

  1. 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.95 A base64-encoded PGP public key block in the contributing guide.
    Reasoning

    The blob starts with the standard RSA public key packet header of an OpenPGP key block, which is the expected content of a contributor guide listing a signing key. Raw-pass base64 matches on such material are a known false-positive pattern.

  2. info critical → info by review 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.75 An opt-in-looking import-tracing wrapper around builtins.__import__ in the package init.
    Reasoning

    Replacing builtins.__import__ is a powerful, process-wide change and would be alarming in most code. Here it wraps the real import in a debug_import helper that logs and delegates, which reads as an opt-in import-tracing debug feature. The snippet does not show the gating condition, so some doubt remains.

  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-frame walk used to locate the first non-Celery caller.
    Reasoning

    Walking sys._getframe up the stack to skip Celery's own frames is a standard way to find the calling module for default app naming. It has no network, file, or execution side effects.

  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.92 Clears the trace function at the end of a remote debugging session.
    Reasoning

    This is the remote debugger module, and sys.settrace(None) is the normal way to stop tracing when the debugging session ends. It is expected behaviour for this module.

  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.92 Lazy submodule import driven by an internal origin map.
    Reasoning

    The __import__ target comes from an internal lazy-loading map (_object_origins) built from the package's own declared module names, which is the standard lazy-import pattern. The argument is not attacker-controlled 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.92 Lazy direct-module import driven by an internal map.
    Reasoning

    Same lazy-loading mechanism as the sibling finding, resolving names from the internal _direct map of the package's own modules. Nothing in the snippet indicates external input.

  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.80 exec of a generated function definition to produce a task with a matching signature.
    Reasoning

    The comment and surrounding code indicate exec is used to generate a function with a matching signature from a definition string built inside the library, not from external input. The snippet is a legitimate code-generation pattern, though exec on a string always merits a look.

  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.80 Decompresses and unpickles persisted revoked-task state.
    Reasoning

    The zlib-decompressed payload is revoked-task state read back from Celery's own persisted store, and the pickle loads is the library's internal serialization. Pickle on untrusted data is a risk, but nothing here shows a hidden or attacker-supplied payload.

  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.95 Azurite local-emulator connection string with its public default account key.
    Reasoning

    The AccountKey is the well-known public Azurite emulator development key, and the endpoint points at a local dev container. It is a documented default, not a real credential.

  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 passed command.
    Reasoning

    exec "$@" is the standard Docker entrypoint idiom that replaces the shell with the container command. The arguments come from the image's own CMD or the operator.

  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.85 A changelog link label using a Greek omega in a project name.
    Reasoning

    The identifier is the project name C-omega written with a Greek omega in link text in a changelog. It is a documentation typo or stylistic choice, with no code or execution context.

  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 Init script sources an administrator-configured extra config file.
    Reasoning

    Sourcing a configuration file named by a variable is the normal pattern for init scripts, and it runs only after an existing sanity check. The path comes from the administrator's environment setup, not from 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 Init script sources the operator-configured defaults file.
    Reasoning

    Sourcing the CELERY_DEFAULTS config file is the standard init-script behaviour for loading operator settings. The path is set by the administrator.

  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.90 Unit test exec of a literal function definition in a test namespace.
    Reasoning

    This is a unit test that execs a fixed, literal function definition with a test namespace. The exec is a test fixture for signature handling, not a payload stage.

  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.93 Test helper capturing the current frame for a traceback assertion.
    Reasoning

    This is a unit test that records the current frame's repr to check traceback or frame handling. inspect.currentframe is ordinary in test code and has no side effects.

  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 assignment swaps builtins.__import__ for a test hook inside a fixture that yields, and the finally block at line 413 restores the real import. This is a common test-isolation pattern for simulating import failures, not a persistent or malicious patch.

  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 Finally block restores the original builtins.__import__ after the test fixture yields.
    Reasoning

    This is the restore step of the same fixture, reinstating the saved realimport in a finally block. It undoes the temporary patch and is benign test cleanup.

  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.92 Embedded RSA private key PEM fixture used by security tests.
    Reasoning

    The blob is a PEM-encoded RSA private key in a Celery security test module. Base64 signal on PEM armor is expected, and the key is a test fixture used to exercise the security serializer, not a live credential or payload.

  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.92 Embedded encrypted private key PEM test fixture.
    Reasoning

    This is an encrypted private key PEM fixture in a test module for Celery security. The base64 content is the expected body of a PEM structure, so it is test data rather than obfuscated payload.

  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.92 Second embedded RSA private key PEM test fixture.
    Reasoning

    Second RSA private key PEM fixture in the same security test module. It is a standard test key whose base64 body is expected for 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.92 Second embedded encrypted private key PEM test fixture.
    Reasoning

    Second encrypted private key PEM fixture in the test module. The base64 body is the normal encoding of PEM data used for testing.

  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.92 Embedded X.509 certificate PEM test fixture.
    Reasoning

    A PEM certificate fixture in a security test module. Certificates are base64 by design, and this is test data for certificate handling.

  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.92 Second embedded X.509 certificate PEM test fixture.
    Reasoning

    Another PEM certificate fixture in the same test module. The base64 encoding is standard for certificates and carries no hidden logic.

  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.92 Embedded ECDSA certificate PEM test fixture.
    Reasoning

    An ECDSA certificate PEM fixture used for security tests. Base64 content is expected for certificate PEM and is not an obfuscated payload.

  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.92 Embedded EC private key PEM test fixture.
    Reasoning

    An EC private key PEM fixture in the security test module. The base64 is the normal PEM body for test key material.

  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.90 Test temporarily overrides builtins.__import__ to simulate a missing dependency.
    Reasoning

    Within a test method, builtins.__import__ is temporarily set to import_hook to force an ImproperlyConfigured path, then restored at line 169. This is ordinary test mocking of the import system.

  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 the original builtins.__import__ after the security test.
    Reasoning

    This restores builtins.__import__ to the saved _import after the test's exception check, completing the temporary mock. It is benign test cleanup.

  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.90 Test helper reads the current stack frame's repr to verify traceback output.
    Reasoning

    inspect.currentframe is used inside a dummy function in a tracing test to record the frame repr for assertions about traceback behavior. Frame inspection here is a debugging or test technique, not evasion.

  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 executes dynamically built function source to exercise head_from_fun.
    Reasoning

    The exec call runs source text that the test itself builds from a literal template to create a function for head_from_fun testing. The input is test-controlled, not attacker-supplied data, so this is a legitimate testing pattern.

  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-compiles a generated Python function definition to check argument-hint introspection.
    Reasoning

    The exec runs a function source string built inside the test with an empty globals dict and a local namespace, then reads back the defined function. The snippet and the file name fit a unit test for head_from_fun, which needs functions with specific signatures. The source is generated by the test itself, not fetched or decoded from an external source.

  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-defines a function with keyword arguments to verify kwargs handling.
    Reasoning

    Same pattern as the other finding in this file: exec of a locally built function source string into a local dict, then retrieval of the defined function. This is a standard way to create functions with particular signatures for testing argument introspection.

  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 code that exec-defines a function with required kwargs to check head_from_fun output.
    Reasoning

    The exec call builds a function with required keyword-only arguments from a test-constructed string and passes it to head_from_fun. The context is clearly a unit test of signature handling, with no network input, decoding, or shell involvement.

  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 that decompresses and unpickles revoked-task state read back from the worker's persistent store.
    Reasoning

    The payload comes from the test's own persistence db (zrevoked key) and is decompressed and unpickled in a test asserting revoked-task state round-trips. Pickle and compression are the expected mechanisms for this celery worker state store, and the data is produced by the test itself, not an attacker-supplied blob.

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