Skip to content

[C++] ComputeLogicalNullCount crashes for dictionary arrays with null value type #50699

Open

Description

@goel-skd

Describe the bug, including details regarding any error messages, version, and platform.

Describe the bug, including details regarding any error messages, version, and platform

Array::ComputeLogicalNullCount segfaults for dictionary arrays whose value type is null(), even though the array passes full validation:

auto type = dictionary(int32(), null());
auto array = DictArrayFromJSON(type, R"([0, 0, null])", "[null]");
ASSERT_OK(array->ValidateFull());
array->ComputeLogicalNullCount();  // segfault

The values array of such a dictionary is a NullArray, which reports null_count == length without having a validity bitmap (buffers[0] is null). The early-out in dict_util::LogicalNullCount only triggers when the dictionary's null count is 0, so the per-index loop unconditionally reads the null validity-bitmap pointer:

https://github.com/apache/arrow/blob/main/cpp/src/arrow/util/dict_util.cc#L56-L59

Note that element-wise Array::IsValid handles the same data correctly (it falls back to null_count == length when there is no bitmap), so the aggregate and per-element views of logical nullness disagree.

Found while working on GH-50338 (#50347).

The crash is also reachable from the bindings through the C++ count kernel, which uses ComputeLogicalNullCount when counting nulls (e.g. pyarrow.compute.count(arr, mode="only_null") on such an array).

Component(s)

C++

Component(s)

C++

Activity

  1. goel-skd commented on Jul 29, 2026

    @goel-skd
    ContributorAuthor

    take

  2. added
    Status: needs championHigh impact issues which aren't being worked on but require a volunteer to move the task forward.
    on Oct 26, 2026
  3. thisisnic commented on Oct 26, 2026

    @thisisnic
    Member

    Confirmed can reproduce on 26.0.0

  4. goel-skd commented on Oct 26, 2026

    @goel-skd
    ContributorAuthor

    Will create a patch soon

  5. thisisnic commented on Oct 26, 2026

    @thisisnic
    Member

    Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Component: C++Status: needs championHigh impact issues which aren't being worked on but require a volunteer to move the task forward.Type: bug

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions