Jörn Horstmann created ARROW-7559: ------------------------------------- Summary: Possibly incorrect index check assertion in StringArray and BinaryArray Key: ARROW-7559 URL: https://issues.apache.org/jira/browse/ARROW-7559 Project: Apache Arrow Issue Type: Bug Components: Rust Affects Versions: 0.16.0 Reporter: Jörn Horstmann
The following code tries to build a list array based on an underlying string array and panics on master (commit acfcdee75acb4b1814f2e727c150a7403d618e8f) {code:java} #[test] fn nested_string_array() { let strarray = StringArray::from(vec!["foo", "bar", "foobar"]); let nestedData = ArrayData::builder(DataType::List(Box::new(DataType::Utf8))) .len(2) .add_buffer(Buffer::from(&[0, 2, 3].to_byte_slice())) .add_child_data(ArrayData::builder(DataType::Utf8) .len(strarray.len()) .add_buffer(strarray.value_offsets()) .add_buffer(strarray.value_data()) .build()) .build(); let nestedArray = ListArray::from(nestedData); dbg!(nestedArray); }{code} My guess is that the index check in StringArray.value is incorrect, instead of {code:java} pub fn value(&self, i: usize) -> &str { assert!( i + self.offset() < self.data.len(), "StringArray out of bounds access" ); {code} it should probably compare {{i}} without adding the offset. The same check is also done in {{BinaryArray}}. Changing this results in the expected output of {code:java} [arrow/src/array/array.rs:2460] nestedArray = ListArray [ StringArray [ "foo", "bar", ], StringArray [ "foobar", ], ] {code} -- This message was sent by Atlassian Jira (v8.3.4#803005)