You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Describe the bug
String types in service types cause microROS on the MCU side to fail in the executor due to a deserializing error. Running it through a debugger it fails in ucdr_deserialize_sequence_header when parsing the nested message type.
Service calls with non-string types work as expected. I've verified it's not a buffer overflow since the buffer size >> bytes received. There is also no packet corruption in UDP traffic, the dest packet and src packet match 1:1.
To Reproduce
Steps to reproduce the behaviour:
On MCU, init service with service type that has a string type
On host side, call service
Expected behaviour
The MCU accepts the service call and handles accordingly.
Actual behaviour
Executor fails due to deserialization error.
System information (please complete the following information):
Seems like this is an error with the nested message type's string member. As it fails in ucdr_deserialize_sequence_header, the length of the string member is greater than the capacity in rosidl_runtime_c__String, which is always 0.
Since there's no issue with UDP comms, this could be due to an error in generating the string type from the agent side.
re: capacity: how do you initialise your message/service structs? Are you using the appropriate _init(..)/_fini(..) pairs or are you using micro_ros_utilities?
Activity
hr-ti commentedon Aug 23, 2024
Seems like this is an error with the nested message type's string member. As it fails in ucdr_deserialize_sequence_header, the length of the string member is greater than the capacity in rosidl_runtime_c__String, which is always 0.
Since there's no issue with UDP comms, this could be due to an error in generating the string type from the agent side.
[-]Deserializing error for nested message types [/-][+]Deserializing error for string types[/+][-]Deserializing error for string types[/-][+]Deserializing error for string type[/+]hr-ti commentedon Aug 26, 2024
This actually applies to any sequence type, like a byte array. Since capacity is always 0, any populated sequence simply just fails
gavanderhoorn commentedon Aug 27, 2024
Edit: apologies, confused
capacitywithsize.re:
capacity: how do you initialise your message/service structs? Are you using the appropriate_init(..)/_fini(..)pairs or are you usingmicro_ros_utilities?