Skip to content

[C++] SelectKUnstable can crash on empty inputs #51210

Description

@taepper

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

If an input Table or ChunkedArray is empty, the SelectKthInternal functions in TableSelector and ChunkedArraySelector have the following early return:

      if (num_rows == 0) {                                                                                                                                                                          
        return Status::OK();                                                                                                                                                                     
      }                                                                                                                                                                                               

Crucially, output_ is never set in these cases. Therefore, SelectKUnstable's make_array() call:

  Result<std::shared_ptr<Array>> SelectKUnstable(const Datum& datum, ...) {                        
    ARROW_ASSIGN_OR_RAISE(Datum result,                                                            
                          CallFunction("select_k_unstable", {datum}, &options, ctx));               
    return result.make_array();
  }                                                                                                 

will fail this DCHECK_EQ:

  std::shared_ptr<Array> Datum::make_array() const {                                                                                                                                                  
    DCHECK_EQ(Datum::ARRAY, this->kind());
    return MakeArray(std::get<std::shared_ptr<ArrayData>>(this->value));                                            
  }                                                                                                                                                                                            

In release builds. std::get will crash with a std::bad_variant_access

This can also be reproduced in python code by calling select_k_unstable with an empty ChunkedArray or Table respectively

Component(s)

C++

Activity

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

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions