GH-51018: [C++] Fix indices_nonzero segfault on chunkless ChunkedArray - #51021
Open
waterWang wants to merge 1 commit into
Open
GH-51018: [C++] Fix indices_nonzero segfault on chunkless ChunkedArray#51021waterWang wants to merge 1 commit into
waterWang wants to merge 1 commit into
Conversation
…edArray Calling indices_nonzero on a ChunkedArray with zero chunks (e.g. the shape produced by filtering a table down to no rows) segfaulted. IndicesNonZeroExecChunked built an empty vector of ArraySpans, and DoNonZero unconditionally dereferenced arrays[0].type, performing an out-of-bounds vector access. Guard DoNonZero so an empty chunk vector yields an empty result, consistent with the zero-length Array and single-empty-chunk cases.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Rationale for this change
pyarrow.compute.indices_nonzero()segfaults (SIGSEGV) on aChunkedArraywith zero chunks — the shape produced by filtering a table to no rows or
slicing zero rows. Reproduced on pyarrow 18.1.0 through 25.0.1. A zero-length
Arrayand aChunkedArrayholding one empty chunk both work; only thechunkless case crashes.
What changes are included in this PR?
IndicesNonZeroExecChunkedbuilds astd::vector<ArraySpan>from the chunks;for a zero-chunk array that vector is empty.
DoNonZerounconditionallydereferenced
arrays[0].type, an out-of-bounds vector access. GuardDoNonZeroso an empty chunk vector returns an empty result, consistent with the other
empty-input paths.
Are these changes tested?
Yes — added a zero-chunk case to
TestIndicesNonZero.IndicesNonZerothatasserts
indices_nonzeroonChunkedArray({}, type)returns[]for everynumeric type. The crash reproduces locally on pyarrow 25.0.1 (SIGSEGV); with
the fix the same call returns an empty array.