diff --git a/cpp/src/arrow/types/string-test.cc b/cpp/src/arrow/types/string-test.cc index d897e30a3c6..af87a14a8b3 100644 --- a/cpp/src/arrow/types/string-test.cc +++ b/cpp/src/arrow/types/string-test.cc @@ -129,6 +129,18 @@ TEST_F(TestStringContainer, TestGetString) { } } +TEST_F(TestStringContainer, TestEmptyStringComparison) { + offsets_ = {0, 0, 0, 0, 0, 0}; + offsets_buf_ = test::to_buffer(offsets_); + length_ = offsets_.size() - 1; + + auto strings_a = std::make_shared( + length_, offsets_buf_, nullptr, null_count_, null_bitmap_); + auto strings_b = std::make_shared( + length_, offsets_buf_, nullptr, null_count_, null_bitmap_); + ASSERT_TRUE(strings_a->Equals(strings_b)); +} + // ---------------------------------------------------------------------- // String builder tests diff --git a/cpp/src/arrow/types/string.cc b/cpp/src/arrow/types/string.cc index d692e13773f..f6d26df3167 100644 --- a/cpp/src/arrow/types/string.cc +++ b/cpp/src/arrow/types/string.cc @@ -56,6 +56,8 @@ bool BinaryArray::EqualsExact(const BinaryArray& other) const { offset_buffer_->Equals(*other.offset_buffer_, (length_ + 1) * sizeof(int32_t)); if (!equal_offsets) { return false; } + if (!data_buffer_ && !(other.data_buffer_)) { return true; } + return data_buffer_->Equals(*other.data_buffer_, data_buffer_->size()); }