Repository: arrow
Updated Branches:
  refs/heads/master 42b55d98c -> e4845c447


ARROW-551: C++: Construction of Column with nullptr Array segfaults

Author: Uwe L. Korn <[email protected]>

Closes #335 from xhochy/ARROW-551 and squashes the following commits:

440d4a9 [Uwe L. Korn] ARROW-551: C++: Construction of Column with nullptr Array 
segfaults


Project: http://git-wip-us.apache.org/repos/asf/arrow/repo
Commit: http://git-wip-us.apache.org/repos/asf/arrow/commit/e4845c44
Tree: http://git-wip-us.apache.org/repos/asf/arrow/tree/e4845c44
Diff: http://git-wip-us.apache.org/repos/asf/arrow/diff/e4845c44

Branch: refs/heads/master
Commit: e4845c447cbef12fa7543f372fbc744fa833fee1
Parents: 42b55d9
Author: Uwe L. Korn <[email protected]>
Authored: Sun Feb 12 07:53:40 2017 -0500
Committer: Wes McKinney <[email protected]>
Committed: Sun Feb 12 07:53:40 2017 -0500

----------------------------------------------------------------------
 cpp/src/arrow/column-test.cc | 4 ++++
 cpp/src/arrow/column.cc      | 6 +++++-
 2 files changed, 9 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/arrow/blob/e4845c44/cpp/src/arrow/column-test.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/column-test.cc b/cpp/src/arrow/column-test.cc
index 0bbfc83..24d58c8 100644
--- a/cpp/src/arrow/column-test.cc
+++ b/cpp/src/arrow/column-test.cc
@@ -135,6 +135,10 @@ TEST_F(TestColumn, BasicAPI) {
   ASSERT_EQ(300, column_->length());
   ASSERT_EQ(30, column_->null_count());
   ASSERT_EQ(3, column_->data()->num_chunks());
+
+  // nullptr array should not break
+  column_.reset(new Column(field, std::shared_ptr<Array>(nullptr)));
+  ASSERT_NE(column_.get(), nullptr);
 }
 
 TEST_F(TestColumn, ChunksInhomogeneous) {

http://git-wip-us.apache.org/repos/asf/arrow/blob/e4845c44/cpp/src/arrow/column.cc
----------------------------------------------------------------------
diff --git a/cpp/src/arrow/column.cc b/cpp/src/arrow/column.cc
index 9cc0f57..1376f65 100644
--- a/cpp/src/arrow/column.cc
+++ b/cpp/src/arrow/column.cc
@@ -90,7 +90,11 @@ Column::Column(const std::shared_ptr<Field>& field, const 
ArrayVector& chunks)
 
 Column::Column(const std::shared_ptr<Field>& field, const 
std::shared_ptr<Array>& data)
     : field_(field) {
-  data_ = std::make_shared<ChunkedArray>(ArrayVector({data}));
+  if (data) {
+    data_ = std::make_shared<ChunkedArray>(ArrayVector({data}));
+  } else {
+    data_ = std::make_shared<ChunkedArray>(ArrayVector({}));
+  }
 }
 
 Column::Column(

Reply via email to