This is an automated email from the ASF dual-hosted git repository.
jorisvandenbossche pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/master by this push:
new e8e24df ARROW-11780: [Python] Avoid crashing when a ChunkedArray is
provided to StructArray.from_arrays()
e8e24df is described below
commit e8e24dfc7f01d0260385b587e48af99ae54533fd
Author: Alessandro Molina <[email protected]>
AuthorDate: Tue Apr 27 11:48:33 2021 +0200
ARROW-11780: [Python] Avoid crashing when a ChunkedArray is provided to
StructArray.from_arrays()
https://issues.apache.org/jira/browse/ARROW-11780
Closes #10097 from amol-/ARROW-11780
Authored-by: Alessandro Molina <[email protected]>
Signed-off-by: Joris Van den Bossche <[email protected]>
---
python/pyarrow/array.pxi | 5 ++++-
python/pyarrow/tests/test_array.py | 10 ++++++++++
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/python/pyarrow/array.pxi b/python/pyarrow/array.pxi
index 81000ce..fb1aa74 100644
--- a/python/pyarrow/array.pxi
+++ b/python/pyarrow/array.pxi
@@ -2186,7 +2186,10 @@ cdef class StructArray(Array):
arrays = [asarray(x) for x in arrays]
for arr in arrays:
- c_arrays.push_back(pyarrow_unwrap_array(arr))
+ c_array = pyarrow_unwrap_array(arr)
+ if c_array == nullptr:
+ raise TypeError(f"Expected Array, got {arr.__class__}")
+ c_arrays.push_back(c_array)
if names is not None:
for name in names:
c_names.push_back(tobytes(name))
diff --git a/python/pyarrow/tests/test_array.py
b/python/pyarrow/tests/test_array.py
index 46c5415..fb0f855 100644
--- a/python/pyarrow/tests/test_array.py
+++ b/python/pyarrow/tests/test_array.py
@@ -669,6 +669,16 @@ def test_struct_from_arrays():
pa.StructArray.from_arrays([a, b, c], fields=[fa2, fb, fc])
+def test_struct_array_from_chunked():
+ # ARROW-11780
+ # Check that we don't segfault when trying to build
+ # a StructArray from a chunked array.
+ chunked_arr = pa.chunked_array([[1, 2, 3], [4, 5, 6]])
+
+ with pytest.raises(TypeError, match="Expected Array"):
+ pa.StructArray.from_arrays([chunked_arr], ["foo"])
+
+
def test_dictionary_from_numpy():
indices = np.repeat([0, 1, 2], 2)
dictionary = np.array(['foo', 'bar', 'baz'], dtype=object)