PyPI / orjson / 3.13.0

orjson 3.13.0

Source
https://github.com/ijl/orjson
Tag scanned
3.13.0
Compared with
3.12.0 (0 signals introduced since)
Files
162 scanned, 417 skipped (binary, oversized, or unrecognised)
Signals
0 critical · 0 warn · 28 info
Scan time
15.1 s
LLM review
Reviewed by claude-haiku-5-5 (Anthropic): 25 of 25 warn and critical signals; 25 demoted to info.
Disclude version
4.0.0
Scanned (UTC)
2026-10-14 18:40

Signals

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

  1. info warn → info by review decoder-decompress-payload bench/util.py:17:20

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

        if path.suffix == ".xz":
            contents = lzma.decompress(path.read_bytes())
        else:
            contents = path.read_bytes()
    likely benign LLM, confidence 0.85 Benchmark helper that decompresses .xz files with lzma when present.
    Reasoning

    The lzma decompress call is conditional on a .xz suffix and reads a local file the benchmark tooling chose to open. This is ordinary archive handling in a benchmark utility, with no sign of a hidden embedded payload.

  2. info warn → info by review dynamic-execution ci/macos.sh:9:1

    pipeline feeds into `sh` — piped data is executed as shell code (ast pass, confidence 0.80)

    
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain "${RUST_TOOLCHAIN}" --target "${TARGET}" --profile minimal --component rust-src -y
    
    source $HOME/.cargo/env
    likely benign LLM, confidence 0.85 CI step that installs the Rust toolchain via the official rustup script.
    Reasoning

    This is the official rustup installer piped to sh over HTTPS with TLS 1.2 enforced. Piping this installer into a shell is a common, documented CI pattern and is not an obfuscated dropper.

  3. info warn → info by review dynamic-import ci/macos.sh:11:1

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

    
    source $HOME/.cargo/env
    
    cargo fetch --target "${TARGET}" &
    likely benign LLM, confidence 0.90 Sources the cargo environment file after rustup installation.
    Reasoning

    Sourcing $HOME/.cargo/env is the standard way to put the rustup-installed toolchain on PATH after installation. The path is fixed relative to HOME, not attacker-controlled.

  4. info warn → info by review dynamic-execution ci/macos.sh:15:1

    command name is a variable (`$PYTHON`) not set in this file — the caller or environment decides what runs (ast pass, confidence 0.70)

    
    ${PYTHON} -m pip install maturin -r test/requirements.txt
    
    ${PYTHON} -m maturin build \
    likely benign LLM, confidence 0.92 Runs pip and maturin through a CI-provided Python interpreter variable.
    Reasoning

    $PYTHON is a conventional CI variable that selects the interpreter for the matrix job. Its value comes from the CI configuration, and the commands run are ordinary pip and maturin invocations.

  5. info warn → info by review dynamic-execution ci/macos.sh:17:1

    command name is a variable (`$PYTHON`) not set in this file — the caller or environment decides what runs (ast pass, confidence 0.70)

    
    ${PYTHON} -m maturin build \
      --release \
      --strip \
    likely benign LLM, confidence 0.92 Builds the orjson wheel with maturin via the CI Python interpreter.
    Reasoning

    This is a maturin build invoked through the CI-configured $PYTHON variable, which is standard for building a Python extension wheel.

  6. info warn → info by review dynamic-execution ci/macos.sh:24:1

    command name is a variable (`$PYTHON`) not set in this file — the caller or environment decides what runs (ast pass, confidence 0.70)

    
    ${PYTHON} -m pip install target/wheels/orjson*
    
    PYTHONMALLOC="debug" ${PYTHON} -m pytest -vv test
    likely benign LLM, confidence 0.92 Installs the built wheel and runs the pytest suite.
    Reasoning

    This installs the built wheel and runs pytest through the CI interpreter variable, which is the normal test step for a Python package.

  7. info warn → info by review dynamic-execution ci/macos.sh:26:1

    command name is a variable (`$PYTHON`) not set in this file — the caller or environment decides what runs (ast pass, confidence 0.70)

    
    PYTHONMALLOC="debug" ${PYTHON} -m pytest -vv test
    
    PYTHONMALLOC="debug" ./integration/run thread
    likely benign LLM, confidence 0.92 Runs the integration test script in the repository.
    Reasoning

    Runs an in-repo integration script with a debug allocator setting. It is a routine test invocation and nothing in the snippet is suspicious.

  8. info warn → info by review dynamic-execution ci/manylinux.sh:9:1

    pipeline feeds into `sh` — piped data is executed as shell code (ast pass, confidence 0.80)

    
    curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain "${RUST_TOOLCHAIN}" --target "${TARGET}" --profile minimal --component rust-src -y
    
    source $HOME/.cargo/env
    likely benign LLM, confidence 0.85 CI step that installs the Rust toolchain via the official rustup script.
    Reasoning

    This is the official rustup installer piped to sh over HTTPS, the same standard CI bootstrap seen in the macOS script. It is not an obfuscated payload.

  9. info warn → info by review dynamic-import ci/manylinux.sh:11:1

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

    
    source $HOME/.cargo/env
    
    cargo fetch --target "${TARGET}" &
    likely benign LLM, confidence 0.90 Sources the cargo environment file after rustup installation.
    Reasoning

    Sourcing $HOME/.cargo/env is the standard post-install step for rustup, with a path fixed relative to HOME.

  10. info warn → info by review dynamic-execution ci/manylinux.sh:15:1

    command name is a variable (`$PYTHON`) not set in this file — the caller or environment decides what runs (ast pass, confidence 0.70)

    
    ${PYTHON} -m pip install maturin auditwheel -r test/requirements.txt
    
    ${PYTHON} -m maturin build \
    likely benign LLM, confidence 0.92 Installs build tools and runs maturin through the CI Python interpreter.
    Reasoning

    $PYTHON is a CI-supplied interpreter variable and the commands are normal pip and maturin usage for building manylinux wheels.

  11. info warn → info by review dynamic-execution ci/manylinux.sh:17:1

    command name is a variable (`$PYTHON`) not set in this file — the caller or environment decides what runs (ast pass, confidence 0.70)

    
    ${PYTHON} -m maturin build \
      --release \
      --strip \
    likely benign LLM, confidence 0.92 Builds manylinux wheels with maturin via the CI Python interpreter.
    Reasoning

    This is a maturin wheel build through the CI-configured interpreter, a standard packaging step.

  12. info warn → info by review dynamic-execution ci/manylinux.sh:25:1

    command name is a variable (`$PYTHON`) not set in this file — the caller or environment decides what runs (ast pass, confidence 0.70)

    
    ${PYTHON} -m auditwheel repair --plat "${ORJSON_TAG}" --only-plat target/wheels/orjson*
    rm -r target/wheels/*
    mv wheelhouse/* target/wheels
    likely benign LLM, confidence 0.92 Repairs built wheels with auditwheel and moves them into the wheel output directory.
    Reasoning

    auditwheel repair converts built wheels to manylinux-tagged wheels, a standard packaging step. The rest is file shuffling within the build directory.

  13. info warn → info by review dynamic-execution ci/manylinux.sh:30:3

    command name is a variable (`$PYTHON`) not set in this file — the caller or environment decides what runs (ast pass, confidence 0.70)

    if [[ "${ORJSON_TAG}" != *"manylinux_2_39"* ]]; then
      ${PYTHON} -m pip install target/wheels/orjson*
      PYTHONMALLOC="debug" ${PYTHON} -m pytest -vv test
    fi
    likely benign LLM, confidence 0.92 Conditionally installs the wheel and runs pytest for a given manylinux tag.
    Reasoning

    This conditionally installs and tests the wheel on a specific manylinux tag, using the CI interpreter variable. It is ordinary conditional test logic.

  14. info warn → info by review dynamic-execution ci/manylinux.sh:31:3

    command name is a variable (`$PYTHON`) not set in this file — the caller or environment decides what runs (ast pass, confidence 0.70)

      ${PYTHON} -m pip install target/wheels/orjson*
      PYTHONMALLOC="debug" ${PYTHON} -m pytest -vv test
    fi
    likely benign LLM, confidence 0.85 Bash CI script invoking a caller-configured Python interpreter via $PYTHON.
    Reasoning

    PYTHON is a variable set by the CI caller to select the interpreter; running pip and pytest with it is standard in a build/test script. Benign pattern given repo context.

  15. info warn → info by review macro-keyword-override include/yyjson/yyjson.h:437:1

    `#define _Bool` rebinds the reserved C keyword `_Bool` (token pass, confidence 0.85)

    #       if defined(__GNUC__) && !defined(__STRICT_ANSI__)
    #           define _Bool bool
    #           if __cplusplus < 201103L
    #               define bool bool
    likely benign LLM, confidence 0.80 Header macro shim mapping _Bool to bool for compiler compatibility.
    Reasoning

    Defining _Bool as bool is a known compatibility shim in yyjson's header for old compilers/C++ interop under GNUC non-strict mode. It is unusual but a documented legacy pattern, not malicious.

  16. info critical → info by review dynamic-execution integration/run:14:2

    command name is a variable (`$_dir`) and `_dir` is assigned the output of a command — executed command determined at runtime (ast pass, confidence 0.90)

    if [[ $to_run == *"thread"* ]]; then
    	"${_dir}"/thread
    fi
    likely benign LLM, confidence 0.85 Integration test runner executing compiled test binaries from a computed build directory.
    Reasoning

    $_dir is derived from the script's own directory and runs test binaries built in the repo. The critical severity comes from the runtime-determined command name, but the pattern is a normal integration test runner.

  17. info critical → info by review dynamic-execution integration/run:18:2

    command name is a variable (`$_dir`) and `_dir` is assigned the output of a command — executed command determined at runtime (ast pass, confidence 0.90)

    if [[ $to_run == *"http"* ]]; then
    	"${_dir}"/http --daemon
    	sleep 2
    	"${_dir}"/client 8001
    likely benign LLM, confidence 0.85 Starts and drives the http integration test server and client binaries.
    Reasoning

    Same pattern as other lines: runs the http test binary and client from the build directory in an integration test script. Benign test orchestration.

  18. info critical → info by review dynamic-execution integration/run:20:2

    command name is a variable (`$_dir`) and `_dir` is assigned the output of a command — executed command determined at runtime (ast pass, confidence 0.90)

    	sleep 2
    	"${_dir}"/client 8001
    	set +e
    	pkill -f 'wsgi:app' # pkill not present on all CI envs
    likely benign LLM, confidence 0.85 Runs client test binary and cleans up the background wsgi server.
    Reasoning

    Runs the client binary against the test daemon then kills it with pkill; ordinary test teardown in CI integration script.

  19. info critical → info by review dynamic-execution integration/run:32:2

    command name is a variable (`$_dir`) and `_dir` is assigned the output of a command — executed command determined at runtime (ast pass, confidence 0.90)

    if [[ $to_run == *"init"* ]]; then
    	"${_dir}"/init
    fi
    likely benign LLM, confidence 0.85 Runs the init integration test binary from the computed directory.
    Reasoning

    Runs the init test binary from the build directory, consistent with the other integration test invocations.

  20. info warn → info by review dynamic-import script/install-fedora:22:1

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

    rustup-init --default-toolchain "${RUST_TOOLCHAIN}-${TARGET}" --profile minimal --component rust-src -y
    source "${HOME}/.cargo/env"
    
    mkdir -p .cargo
    likely benign LLM, confidence 0.85 Sources the cargo environment file after rustup installation.
    Reasoning

    Sources the standard rustup env file at $HOME/.cargo/env after installing rustup; a well-known and expected install step.

  21. info warn → info by review dynamic-import script/install-fedora:31:1

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

    uv venv --python "${PYTHON}" "${VENV}"
    source "${VENV}/bin/activate"
    
    uv pip install --upgrade "maturin>=1.10,<2" -r test/requirements.txt -r integration/requirements.txt
    likely benign LLM, confidence 0.85 Activates the uv-created virtualenv.
    Reasoning

    Activates the Python venv it just created with uv; standard setup, path is local and controlled by the script.

  22. info warn → info by review decoder-decompress-payload script/pycorrectness:34:20

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

        if path.suffix == ".xz":
            contents = lzma.decompress(path.read_bytes())
        else:
            contents = path.read_bytes()
    likely benign LLM, confidence 0.80 Reads optionally xz-compressed test or source files via lzma.
    Reasoning

    Decompresses .xz files only when the path suffix is .xz, which is a plain file-reading helper for test data. No embedded hidden payload or execution of the decompressed content.

  23. info warn → info by review decoder-decompress-payload script/pyindent:27:20

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

        if path.suffix == ".xz":
            contents = lzma.decompress(path.read_bytes())
        else:
            contents = path.read_bytes()
    likely benign LLM, confidence 0.80 Reads optionally xz-compressed Python files for formatting checks.
    Reasoning

    Same benign xz-aware file reading helper; decompressed bytes are treated as source text, not executed.

  24. info warn → info by review decoder-decompress-payload script/pysort:26:20

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

        if path.suffix == ".xz":
            contents = lzma.decompress(path.read_bytes())
        else:
            contents = path.read_bytes()
    likely benign LLM, confidence 0.80 Reads optionally xz-compressed files via lzma in a dev script.
    Reasoning

    Same benign xz-aware file reading helper used in a sorting/lint script; no execution of decompressed content.

  25. info identifier-low-length src/serialize/writer/str/escape.rs:1:1

    196 of 289 non-conventional identifiers are single-character (68%) (token pass, confidence 0.50)

  26. info unicode-mixed-script test/test_jsonchecker.py:11:489

    identifier `ģ䕧覫췯ꯍ` mixes scripts: Latin + Han + Hangul + Other (in string/comment) (raw pass, confidence 0.40)

    1~!@#$%^&*()_+-={\':[,]}|;.</>?","hex":"ģ䕧覫췯ꯍ\uef4a","true":true,"false":false,"null":null,"array":[],"object":{},"address":"50 St. James Street","url":"http://www.JSON.org/","comment":"// /* <!-- --","# -- --> */":" "," s p a c e d ":[1,2,3,4,5,6,7],"compact":[1,2,3,4,5,6,7],"jsontext":"{\\"object with 1 memb
  27. info unicode-mixed-script test/test_jsonchecker.py:11:856

    identifier `쫾몾ꮘﳞ볚` mixes scripts: Hangul + Other (in string/comment) (raw pass, confidence 0.40)

    &#34; \\" %22 0x22 034 &#x22;","/\\\\\\"쫾몾ꮘﳞ볚\uef4a\\b\\f\\n\\r\\t`1~!@#$%^&*()_+-=[]{}|;:\',./<>?":"A key can be any string"},0.5,98.6,99.44,1066,10.0,1.0,0.1,1.0,2.0,2.0,"rosebud"]'.encode()
  28. info warn → info by review decoder-decompress-payload test/util.py:50:20

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

        if path.suffix == ".xz":
            contents = lzma.decompress(path.read_bytes())
        else:
            contents = path.read_bytes()
    likely benign LLM, confidence 0.80 Test helper reading optionally xz-compressed fixture files.
    Reasoning

    Test utility that transparently reads .xz fixture files; decompressed content is used as test data, not executed.

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/ijl/orjson orjson && cd orjson
git checkout 3.13.0
disclude scan --severity info --diff 3.12.0 .