PyPI / orjson / 3.13.0

orjson 3.13.0

Source
https://github.com/ijl/orjson
Artifact scanned
orjson-3.13.0.tar.gz (sdist · 2.6 MB · SHA-256 d1de5eb04485…)
Compared with
orjson-3.12.0.tar.gz (0 signals introduced since)
Files
1096 scanned, 185 skipped (binary, oversized, or unrecognised)
Signals
0 critical · 0 warn · 19 info
Scan time
10.9 s
LLM review
Reviewed by claude-haiku-5-5 (Anthropic): 6 of 6 warn and critical signals; 6 demoted to info.
Disclude version
4.3.0
Scanned (UTC)
2026-10-23 07:04

Signals

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

  1. file mixes tab and space indentation (5 tab-indented and 1000 space-indented lines) (raw pass, confidence 0.40)

    macro_rules! registers {
        ($struct_name:ident, { $($name:ident = ($val:expr, $disp:expr)),+ $(,)? }
            $(, aliases { $($alias_name:ident = ($alias_val:expr, $alias_disp:expr)),+ $(,)? })?) => {
            #[allow(missing_docs)]
  2. identifier `İıÀàĀāĹĺЕеẦầKkⰝⱍMm𐲒𐳒` contains homoglyph candidates: Е (0415)→E, е (0435)→e (in string/comment) (raw pass, confidence 0.35)

            // Test case copied from LLVM
            let s = "İıÀàĀāĹĺЕеẦầKkⰝⱍMm𐲒𐳒";
            assert_eq!(case_folding_djb_hash(s), 1145571043);
        }
  3. identifier `İıÀàĀāĹĺЕеẦầKkⰝⱍMm𐲒𐳒` mixes scripts: Latin + Cyrillic + Other (in string/comment) (raw pass, confidence 0.40)

            // Test case copied from LLVM
            let s = "İıÀàĀāĹĺЕеẦầKkⰝⱍMm𐲒𐳒";
            assert_eq!(case_folding_djb_hash(s), 1145571043);
        }
  4. info warn → info by review dynamic-execution include/cargo/no-panic-0.1.37/README.md:46:69

    [embedded bash] command name is a variable (`$LT`, `$no_pani`) not set in this file — the caller or environment decides what runs (ast pass, confidence 0.70)

      = note: /no-panic-demo/target/release/deps/no_panic_demo-7170785b672ae322.no_p
    anic_demo1-cba7f4b666ccdbcbbf02b7348e5df1b2.rs.rcgu.o: In function `_$LT$no_pani
    c_demo..demo..__NoPanic$u20$as$u20$core..ops..drop..Drop$GT$::drop::h72f8f423002
    b8d9f':
    likely benign LLM, confidence 0.93 Pasted GNU linker diagnostic containing Rust mangled symbol names, flagged as an embedded bash command.
    Reasoning

    The snippet is linker error output pasted into a Markdown README. The '$LT' and '$no_pani' fragments are Rust mangled symbol names, not shell commands, and nothing in the snippet is executed.

  5. info warn → info by review dynamic-execution include/cargo/no-panic-0.1.37/README.md:47:1

    [embedded bash] command name is a variable (`$u20`, `$as`) not set in this file — the caller or environment decides what runs (ast pass, confidence 0.70)

    anic_demo1-cba7f4b666ccdbcbbf02b7348e5df1b2.rs.rcgu.o: In function `_$LT$no_pani
    c_demo..demo..__NoPanic$u20$as$u20$core..ops..drop..Drop$GT$::drop::h72f8f423002
    b8d9f':
              no_panic_demo1-cba7f4b666ccdbcbbf02b7348e5df1b2.rs:(.text._ZN72_$LT$no
    likely benign LLM, confidence 0.93 Continuation of the same linker output with mangled Rust symbol fragments misread as shell commands.
    Reasoning

    Same README: the flagged '$u20' and '$as' tokens are fragments of a Rust mangled symbol inside linker output. The scanner misread them as shell commands; this is documentation text.

  6. proc-macro attribute `#[proc_macro_attribute]` present (ast pass, confidence 0.95)

    
    #[proc_macro_attribute]
    pub fn no_panic(args: TokenStream, input: TokenStream) -> TokenStream {
        let args = TokenStream2::from(args);
  7. [embedded rust] proc-macro attribute `#[proc_macro_derive]` present (ast pass, confidence 0.95)

    
    #[proc_macro_derive(MyDerive)]
    pub fn my_derive(input: proc_macro::TokenStream) -> proc_macro::TokenStream {
        let input = proc_macro2::TokenStream::from(input);
  8. info warn → info by review dynamic-execution include/cargo/shlex-2.0.1/src/quoting_warning.md:303:3

    [embedded bash] pipeline feeds into `bash` — piped data is executed as shell code (ast pass, confidence 0.80)

    ```bash
    $ echo -e 'ls a\xa0b' | bash
    ls: a: No such file or directory
    ls: b: No such file or directory
    likely benign LLM, confidence 0.90 Doc example piping a demonstration string into bash to show a shell quoting pitfall.
    Reasoning

    This is a documentation example in a shlex quoting warning showing how unquoted bytes change how bash parses input. The pipe into bash is a deliberate illustration of the hazard, not an attack payload.

  9. info warn → info by review dynamic-execution include/cargo/shlex-2.0.1/src/quoting_warning.md:309:3

    [embedded bash] pipeline feeds into `bash` — piped data is executed as shell code (ast pass, confidence 0.80)

    ```bash
    $ echo -e 'ls a\xa0b' | bash
    ls: cannot access 'a'$'\240''b': No such file or directory
    ```
    likely benign LLM, confidence 0.90 Second doc example in the shlex quoting warning showing bash output for a piped string.
    Reasoning

    Same doc page and same pedagogical pattern: a shell session output showing the effect of piping crafted input into bash. It is illustrative text inside a markdown file.

  10. info proc-macro-presence include/cargo/syn-3.0.6/README.md:93:1

    [embedded rust] proc-macro attribute `#[proc_macro_derive]` present (ast pass, confidence 0.95)

    
    #[proc_macro_derive(MyMacro)]
    pub fn my_macro(input: TokenStream) -> TokenStream {
        // Parse the input tokens into a syntax tree
  11. identifier `customvendοr` contains homoglyph candidates: ο (03BF)→o (in string/comment) (raw pass, confidence 0.35)

            assert!(
                Triple::from_str("x86_64-customvendοr-linux").is_err(),
                "homoglyph hazard"
            );
  12. identifier `customvendοr` mixes scripts: Latin + Greek (in string/comment) (raw pass, confidence 0.40)

            assert!(
                Triple::from_str("x86_64-customvendοr-linux").is_err(),
                "homoglyph hazard"
            );
  13. U+200D ZERO WIDTH JOINER in source (in string/comment) (raw pass, confidence 0.45)

            assert!(
                Triple::from_str("x86_64-custom⟨U+200D⟩vendor-linux").is_err(),
                "zero-width character hazard"
            );
  14. U+FEFF ZERO WIDTH NO-BREAK SPACE (BOM) in source (in string/comment) (raw pass, confidence 0.45)

            assert!(
                Triple::from_str("x86_64-⟨U+FEFF⟩customvendor-linux").is_err(),
                "BOM hazard"
            );
  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.72 Conditional macro mapping the C keyword _Bool to bool for older compilers and C++ interop in yyjson.
    Reasoning

    The redefinition sits inside a compiler-specific conditional (GNUC without strict ANSI) and maps _Bool to bool for C++ compatibility, which is a known portability idiom in bundled JSON libraries. It is unusual and rebinds a keyword, but the context looks like legitimate compatibility code rather than an attack.

  16. 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)

  17. 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
  18. 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()
  19. 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.85 Test helper that reads a local file and decompresses it with lzma when the suffix is .xz.
    Reasoning

    The code decompresses a local .xz file read from disk in a test utility. The payload is a repository file, not a hidden or embedded blob fetched at runtime, and lzma decompression is a normal test-fixture operation.

Reproduce This Scan

Run disclude locally to verify. These commands scan the published file; the "new in this release" marks come from comparing it with the previous release's file, which they don't repeat. 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.3.0
curl -fsSL -o orjson-3.13.0.tar.gz https://files.pythonhosted.org/packages/f2/72/380b97dc45bd162d23afe5194721ef678d9eac7cfaa549fe2873f7f0a518/orjson-3.13.0.tar.gz
printf '%s  %s\n' d1de5eb04485110c5da4c657e49168995d55e076b1ce60f1a042e254f4186c4f orjson-3.13.0.tar.gz | shasum -a 256 -c -
mkdir pkg && tar -xzf orjson-3.13.0.tar.gz -C pkg --strip-components 1
disclude scan --untrusted --severity info pkg