Skip to content

Commit e21a4a7

Browse files
Fix panic for empty sequences
Signed-off-by: Luca Della Vedova <[email protected]>
1 parent 470396b commit e21a4a7

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

rclrs/src/dynamic_message/field_access/dynamic_sequence.rs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,9 @@ impl TypeErasedSequence {
196196
T: Proxy<'msg>,
197197
{
198198
let element_size = T::size_in_memory(metadata);
199+
if self.data.is_null() {
200+
return Vec::new();
201+
};
199202
let sequence_data =
200203
std::slice::from_raw_parts(self.data as *const u8, self.size * element_size);
201204
check::<T>(sequence_data);
@@ -210,6 +213,9 @@ impl TypeErasedSequence {
210213
T: ProxyMut<'msg>,
211214
{
212215
let element_size = T::size_in_memory(metadata);
216+
if self.data.is_null() {
217+
return Vec::new();
218+
};
213219
let sequence_data =
214220
std::slice::from_raw_parts_mut(self.data as *mut u8, self.size * element_size);
215221
check::<T>(sequence_data);

rclrs/src/dynamic_message/message_structure.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1141,4 +1141,16 @@ mod tests {
11411141
let _dyn_msg =
11421142
DynamicMessage::new("test_msgs/msg/BoundedSequences".try_into().unwrap()).unwrap();
11431143
}
1144+
1145+
#[test]
1146+
fn empty_sequence_issue_492() {
1147+
let message_type = MessageTypeName {
1148+
package_name: "test_msgs".to_owned(),
1149+
type_name: "UnboundedSequences".to_owned(),
1150+
};
1151+
let mut msg = DynamicMessage::new(message_type).unwrap();
1152+
1153+
let _ = msg.get("basic_types_values");
1154+
let _ = msg.get_mut("basic_types_values");
1155+
}
11441156
}

0 commit comments

Comments
 (0)