diff --git a/cpp/src/arrow/array/util.cc b/cpp/src/arrow/array/util.cc index 4cc868a4a7f87..35472682d0419 100644 --- a/cpp/src/arrow/array/util.cc +++ b/cpp/src/arrow/array/util.cc @@ -921,9 +921,13 @@ Result> MakeMaskArray(const std::vector& indices BooleanBuilder builder(pool); RETURN_NOT_OK(builder.Resize(length)); + auto indices_end = indices.end(); auto i = indices.begin(); for (int64_t builder_i = 0; builder_i < length; builder_i++) { - if (builder_i == *i) { + if (i == indices_end) { + RETURN_NOT_OK(builder.AppendValues(static_cast(length - builder.length()), false)); + break; + } else if (builder_i == *i) { builder.UnsafeAppend(true); i++; } else {