PyPI / pyarrow / 26.0.0

pyarrow 26.0.0

Source
https://github.com/apache/arrow
Artifact scanned
pyarrow-26.0.0.tar.gz (sdist · 1.2 MB · SHA-256 0cccd36e00ea…)
Compared with
pyarrow-25.0.1.tar.gz (0 signals introduced since)
Files
197 scanned, 135 skipped (binary, oversized, or unrecognised)
Signals
0 critical · 0 warn · 18 info
Scan time
7.7 s
LLM review
Reviewed by claude-haiku-5-5 (Anthropic): 10 of 10 warn and critical signals; 10 demoted to info.
Disclude version
4.3.0
Scanned (UTC)
2026-10-23 03:21

Signals

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

  1. info warn → info by review dynamic-import 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 Build script sources the conda activation profile from a variable install path.
    Reasoning

    Sourcing conda's profile script from a MINICONDA install path is a standard, legitimate build-script pattern; the variable is a local install location, not attacker-controlled input.

  2. info warn → info by review dynamic-import 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 Build script activates a venv it just created via a variable path.
    Reasoning

    Activating a virtualenv created one line earlier in the same script at $WORKDIR/venv is ordinary build tooling with no remote or encoded input.

  3. info warn → info by review dynamic-attribute 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.88 Module looks up a function class by name in globals() to expose compute bindings.
    Reasoning

    Looking up generated wrapper function classes in module globals by name is a common Python dispatch idiom in pyarrow; the lookup key is internal and it warns on KeyError.

  4. info unicode-mixed-script pyarrow/tests/test_compute.py:681:34

    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. info unicode-mixed-script pyarrow/tests/test_compute.py:681:44

    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. info unicode-mixed-script pyarrow/tests/test_compute.py:681:56

    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. info unicode-mixed-script pyarrow/tests/test_compute.py:681:71

    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. info unicode-mixed-script pyarrow/tests/test_compute.py:1223:38

    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. info unicode-mixed-script pyarrow/tests/test_compute.py:1223:45

    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. info unicode-mixed-script pyarrow/tests/test_compute.py:1223:54

    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. info unicode-mixed-script pyarrow/tests/test_compute.py:1223:64

    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 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.85 Test embeds a serialized Substrait projection plan as a bytes literal.
    Reasoning

    The bytes literal is a serialized Substrait plan with a readable URL and extension names, which is a protobuf encoding of a test query, not a hidden payload.

  13. info warn → info by review payload-bytes-literal 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.85 Test embeds a serialized Substrait filter plan as a bytes literal.
    Reasoning

    Same pattern as the other Substrait test: protobuf-encoded filter and extension URIs used as test fixtures, consistent with the surrounding query tests.

  14. info warn → info by review decoder-decompress-payload 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.88 Test calls pyarrow's decompress API on test data to verify codec round trips.
    Reasoning

    pa.decompress is the pyarrow codec API exercised on test buffers in a compression test; there is no embedded hidden payload or execution of decompressed content.

  15. info warn → info by review payload-bytes-literal 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.85 Test embeds a serialized Substrait project message as a bytes literal.
    Reasoning

    The bytes are a Substrait protobuf plan containing readable field names and a SQL-derived projection, matching the test's documented SELECT query.

  16. info warn → info by review frame-introspection 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 Test uses sys._getframe to clear traceback cycles before a weakref check.
    Reasoning

    Test helper uses sys._getframe(0) to break traceback reference cycles for a weakref test, a standard and harmless debugging-style use.

  17. info warn → info by review frame-introspection 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.88 pyarrow utility inspects its own frame and gc referrers to break reference cycles.
    Reasoning

    Library utility inspects its own frame and gc referrers to break reference cycles when a frame is kept alive; this is a documented memory-management technique, not malicious introspection.

  18. info warn → info by review dynamic-attribute 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.88 Developer script resolves module attributes by name to update stub docstrings.
    Reasoning

    Using vars(parent).get(part) to resolve attribute names when generating stub docstrings is ordinary introspection in a developer script.

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 pyarrow-26.0.0.tar.gz https://files.pythonhosted.org/packages/ec/34/17c34cb38e5d940e38f0f0d9fdfa0e8a506676409ea9b85aff7e3079f831/pyarrow-26.0.0.tar.gz
printf '%s  %s\n' 0cccd36e00ea3afeb52ded61f2721ce71f604853d70c45365c58324eb773d6ae pyarrow-26.0.0.tar.gz | shasum -a 256 -c -
mkdir pkg && tar -xzf pyarrow-26.0.0.tar.gz -C pkg --strip-components 1
disclude scan --untrusted --severity info pkg