Skip to content

GH-51044: [Python] Reject read-only readinto destinations - #51126

Open
carrerasdarren-cell wants to merge 1 commit into
apache:mainfrom
carrerasdarren-cell:gh-51044-readinto-readonly
Open

GH-51044: [Python] Reject read-only readinto destinations#51126
carrerasdarren-cell wants to merge 1 commit into
apache:mainfrom
carrerasdarren-cell:gh-51044-readinto-readonly

Conversation

@carrerasdarren-cell

@carrerasdarren-cell carrerasdarren-cell commented Sep 1, 2026

Copy link
Copy Markdown

Rationale for this change

BufferReader.readinto() currently segfaults when passed a read-only destination such as bytes or a read-only memoryview. py_buffer() creates an immutable Arrow buffer, mutable_data() returns a null pointer, and the C++ read path attempts to copy into that pointer. A Python API misuse should raise a Python exception rather than terminate the interpreter.

What changes are included in this PR?

  • Validate that a NativeFile.readinto() destination is mutable before obtaining its writable pointer.
  • Raise TypeError for immutable destinations.
  • Add regression coverage for bytes and read-only memoryview destinations.

Are these changes tested?

Yes. The focused readinto tests pass against a locally compiled patched pyarrow.lib. The stock 25.0.1 wheel exits with status 139 for the issue reproducer, while the patched build raises the expected TypeError; the writable bytearray control continues to read successfully.

Are there any user-facing changes?

Yes. Passing a read-only destination to NativeFile.readinto() now raises TypeError instead of terminating the interpreter. Writable-buffer behavior is unchanged.

Fixes #51044.

This contribution was developed with assistance from OpenAI Codex. I reviewed, tested, and take responsibility for the patch and this description.

Immutable destinations expose a null mutable pointer and can crash the native read path. Validate destination mutability and cover bytes and read-only memoryviews with regression tests.

Assisted-by: OpenAI Codex
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Python] BufferReader.readinto() segfaults on a read-only destination

1 participant