Skip to content

Commit

Permalink
Cherry PR snapshot: Fix panic when hashing empty FixedSizeList Array
Browse files Browse the repository at this point in the history
Previously it would panic due to division by zero.
  • Loading branch information
findepi committed Nov 25, 2024
1 parent dd30658 commit c05d38f
Showing 1 changed file with 15 additions and 1 deletion.
16 changes: 15 additions & 1 deletion datafusion/common/src/hash_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,11 @@ fn hash_fixed_list_array(
) -> Result<()> {
let values = Arc::clone(array.values());
let value_len = array.value_length();
let offset_size = value_len as usize / array.len();
let offset_size = if array.len() == 0 {
0
} else {
value_len as usize / array.len()
};
let nulls = array.nulls();
let mut values_hashes = vec![0u64; values.len()];
create_hashes(&[values], random_state, &mut values_hashes)?;
Expand Down Expand Up @@ -462,6 +466,16 @@ mod tests {
Ok(())
}

#[test]
fn create_hashes_for_empty_fixed_size_lit() -> Result<()> {
let empty_array = FixedSizeListBuilder::new(StringBuilder::new(), 1).finish();
let random_state = RandomState::with_seeds(0, 0, 0, 0);
let hashes_buff = &mut vec![0; 0];
let hashes = create_hashes(&[Arc::new(empty_array)], &random_state, hashes_buff)?;
assert_eq!(hashes, &Vec::<u64>::new());
Ok(())
}

#[test]
fn create_hashes_for_float_arrays() -> Result<()> {
let f32_arr = Arc::new(Float32Array::from(vec![0.12, 0.5, 1f32, 444.7]));
Expand Down

0 comments on commit c05d38f

Please sign in to comment.