PyPI / pyarrow / 26.0.0

pyarrow 26.0.0

Source
https://github.com/apache/arrow
Tag scanned
apache-arrow-26.0.0
Directory
python (only this part of the repository was scanned)
Compared with
apache-arrow-25.0.1 (0 signals introduced since)
Files
196 scanned, 93 skipped (binary, oversized, or unrecognised)
Signals
0 critical · 0 warn · 18 info
Scan time
6.4 s
LLM review
Reviewed by claude-haiku-5-5 (Anthropic): 10 of 10 warn and critical signals; 10 demoted to info.
Disclude version
4.0.0
Scanned (UTC)
2026-10-14 18:22

Signals

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

  1. info warn → info by review dynamic-import python/examples/minimal_build/build_conda.sh:65:1

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

    
    . $MINICONDA/etc/profile.d/conda.sh
    conda activate pyarrow-$PYTHON
    export ARROW_HOME=$CONDA_PREFIX
    likely benign LLM, confidence 0.90 Sources the conda activation script from a variable install path.
    Reasoning

    Sourcing conda's profile script from a MINICONDA variable path is standard shell setup for an Arrow build example; no obfuscation or malicious behavior.

  2. info warn → info by review dynamic-import python/examples/minimal_build/build_venv.sh:33:1

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

    python3 -m venv $WORKDIR/venv
    source $WORKDIR/venv/bin/activate
    
    git config --global --add safe.directory $ARROW_ROOT
    likely benign LLM, confidence 0.90 Activates a Python virtualenv created in the same script.
    Reasoning

    Activating a venv created just above at $WORKDIR/venv is ordinary build scripting, not an injection vector.

  3. info warn → info by review dynamic-attribute python/pyarrow/compute.py:218:16

    reach-by-name through `globals` (ast pass, confidence 0.60)

        try:
            return globals()[class_name]
        except KeyError:
            warnings.warn(f"Python binding for {class_name} not exposed",
    likely benign LLM, confidence 0.85 Retrieves a binding class from globals() by name with a KeyError fallback.
    Reasoning

    Looking up a generated function wrapper by name in module globals is a common Python dispatch idiom; the class_name is internal and the fallback only warns.

  4. identifier `𝑓ö` mixes scripts: Other + Latin (in string/comment) (raw pass, confidence 0.40)

    def test_slice_compatibility():
        arr = pa.array(["", "𝑓", "𝑓ö", "𝑓öõ", "𝑓öõḍ", "𝑓öõḍš"])
        for start in range(-6, 6):
            for stop in itertools.chain(range(-6, 6), [None]):
  5. identifier `𝑓öõ` mixes scripts: Other + Latin (in string/comment) (raw pass, confidence 0.40)

    def test_slice_compatibility():
        arr = pa.array(["", "𝑓", "𝑓ö", "𝑓öõ", "𝑓öõḍ", "𝑓öõḍš"])
        for start in range(-6, 6):
            for stop in itertools.chain(range(-6, 6), [None]):
  6. identifier `𝑓öõḍ` mixes scripts: Other + Latin (in string/comment) (raw pass, confidence 0.40)

    def test_slice_compatibility():
        arr = pa.array(["", "𝑓", "𝑓ö", "𝑓öõ", "𝑓öõḍ", "𝑓öõḍš"])
        for start in range(-6, 6):
            for stop in itertools.chain(range(-6, 6), [None]):
  7. identifier `𝑓öõḍš` mixes scripts: Other + Latin (in string/comment) (raw pass, confidence 0.40)

    def test_slice_compatibility():
        arr = pa.array(["", "𝑓", "𝑓ö", "𝑓öõ", "𝑓öõḍ", "𝑓öõḍš"])
        for start in range(-6, 6):
            for stop in itertools.chain(range(-6, 6), [None]):
  8. identifier `πb` mixes scripts: Greek + Latin (in string/comment) (raw pass, confidence 0.40)

    
        arr = pa.array([None, '', 'π', 'πb', 'πbθ', 'πbθd', 'πbθde'])
        series = arr.to_pandas().astype(object).replace({np.nan: None})
        for start in offsets:
  9. identifier `πbθ` mixes scripts: Greek + Latin (in string/comment) (raw pass, confidence 0.40)

    
        arr = pa.array([None, '', 'π', 'πb', 'πbθ', 'πbθd', 'πbθde'])
        series = arr.to_pandas().astype(object).replace({np.nan: None})
        for start in offsets:
  10. identifier `πbθd` mixes scripts: Greek + Latin (in string/comment) (raw pass, confidence 0.40)

    
        arr = pa.array([None, '', 'π', 'πb', 'πbθ', 'πbθd', 'πbθde'])
        series = arr.to_pandas().astype(object).replace({np.nan: None})
        for start in offsets:
  11. identifier `πbθde` mixes scripts: Greek + Latin (in string/comment) (raw pass, confidence 0.40)

    
        arr = pa.array([None, '', 'π', 'πb', 'πbθ', 'πbθd', 'πbθde'])
        series = arr.to_pandas().astype(object).replace({np.nan: None})
        for start in offsets:
  12. info warn → info by review payload-bytes-literal python/pyarrow/tests/test_dataset.py:5979:19

    concatenated bytes literal contains 77 `\xNN` escapes (63% of content) — binary payload shape (ast pass, confidence 0.85)

        # SELECT str WHERE i64 = 4
        projection = (b'\nS\x08\x0c\x12Ohttps://github.com/apache/arrow/blob/main/format'
                      b'/substrait/extension_types.yaml\x12\t\n\x07\x08\x0c\x1a\x03u64'
                      b'\x12\x0b\n\t\x08\x0c\x10\x01\x1a\x03u32\x1a\x0f\n\x08\x12\x06'
    likely benign LLM, confidence 0.90 Test fixture holding a serialized Substrait projection plan as bytes.
    Reasoning

    The bytes are a Substrait protobuf plan containing readable strings such as a YAML extension URL and type names; this is a serialized test fixture, not a hidden payload.

  13. info warn → info by review payload-bytes-literal python/pyarrow/tests/test_dataset.py:5987:18

    concatenated bytes literal contains 107 `\xNN` escapes (65% of content) — binary payload shape (ast pass, confidence 0.85)

                      b'\n\x04b\x02\x10\x01\x18\x01\n\x04*\x02\x10\x01\n\x04b\x02\x10\x01')
        filtering = (b'\n\x1e\x08\x06\x12\x1a/functions_comparison.yaml\nS\x08\x0c\x12'
                     b'Ohttps://github.com/apache/arrow/blob/main/format'
    likely benign LLM, confidence 0.90 Test fixture holding a serialized Substrait filter plan as bytes.
    Reasoning

    Same pattern: a Substrait filter plan encoded as protobuf bytes in a test, with readable embedded YAML URIs and function names.

  14. info warn → info by review decoder-decompress-payload python/pyarrow/tests/test_io.py:840:24

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

    
        decompressed_buf = pa.decompress(compressed_buf, INPUT_SIZE,
                                         codec=compression)
        decompressed_bytes = pa.decompress(compressed_bytes, INPUT_SIZE,
    likely benign LLM, confidence 0.90 Round-trip test calling Arrow's decompress with a chosen codec.
    Reasoning

    pa.decompress is the Arrow codec API exercised by a compression round-trip test on generated data; it is not runtime execution of a hidden payload.

  15. info warn → info by review payload-bytes-literal python/pyarrow/tests/test_substrait.py:1126:16

    concatenated bytes literal contains 34 `\xNN` escapes (63% of content) — binary payload shape (ast pass, confidence 0.85)

        # SELECT project_release, project_version
        message = (b'\x1a\x1b\n\x08\x12\x06\n\x04\x12\x02\x08\x01\x1a\x0fproject_release'
                   b'\x1a\x19\n\x06\x12\x04\n\x02\x12\x00\x1a\x0fproject_version'
                   b'"0\n\x0fproject_version\n\x0fproject_release'
    likely benign LLM, confidence 0.90 Test fixture holding a serialized Substrait message as bytes.
    Reasoning

    A Substrait plan serialized as protobuf bytes for a test, containing readable field names like project_release; consistent with legitimate test data.

  16. info warn → info by review frame-introspection python/pyarrow/tests/test_util.py:211:43

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

            assert wr() is not None
            _break_traceback_cycle_from_frame(sys._getframe(0))
            assert wr() is None
    likely benign LLM, confidence 0.90 Passes the current frame to a helper that breaks traceback cycles in tests.
    Reasoning

    sys._getframe(0) is used to break a traceback reference cycle in a test helper, a legitimate memory-management technique.

  17. info warn → info by review frame-introspection python/pyarrow/util.py:213:18

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

        # reference cycle.
        this_frame = sys._getframe(0)
        refs = gc.get_referrers(frame)
        while refs:
    likely benign LLM, confidence 0.90 Gets the current frame to find and clear reference cycles.
    Reasoning

    Frame introspection with gc.get_referrers is used to avoid reference cycles when handling frames; a documented memory-hygiene pattern in library code.

  18. info warn → info by review dynamic-attribute python/scripts/update_stub_docstrings.py:54:23

    reach-by-name through `vars.get` (ast pass, confidence 0.60)

                try:
                    obj = vars(parent).get(part)
                    if obj is not None:
                        continue
    likely benign LLM, confidence 0.90 Looks up a named member on a parent object to update stub docstrings.
    Reasoning

    vars(parent).get(part) is ordinary attribute lookup while resolving module members for docstring updates; no dynamic execution or concealment.

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/apache/arrow arrow && cd arrow
git checkout apache-arrow-26.0.0
disclude scan --severity info --diff apache-arrow-25.0.1 python