Skip to content

Commit

Permalink
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 22, 2024
1 parent e7d9504 commit 28e3b99
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 @@ -454,6 +458,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 28e3b99

Please sign in to comment.