Skip to content

UnicodeDecodeErrors and exceptions for Motive 3 compatibility #6

@hello-bharadwaj

Description

@hello-bharadwaj

Problem Description

The natnet python library (v0.2.0) crashes when connecting to newer Motive servers (e.g., Motive 3.3.0 which uses NatNet Protocol 4.2).

The crashes occur in two places:

  1. UnicodeDecodeError: When parsing strings in MODELDEF packets using PacketBuffer.read_string. The newer protocol seems to send bytes that are not strictly valid utf-8 in the expected context or the parsing offset is misaligned.
  2. struct.error: When parsing DataDescriptions. Because the library does not support Protocol 4.X, it fails to account for new fields or size changes in the packet structure, leading to invalid pointer offsets.
my-computer@abode:~/home/tests$ python3 test_natnet.py

Traceback (most recent call last):
  File "/home/hello-robot/repos/stretch_production_tools_ii/test_natnet_repro.py", line 26, in <module>
    streaming_client.update_sync()
  File "/home/hello-robot/.local/lib/python3.12/site-packages/natnet/nat_net_client.py", line 268, in update_sync
    while self.__process_socket(
          ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/hello-robot/.local/lib/python3.12/site-packages/natnet/nat_net_client.py", line 144, in __process_socket
    self.__process_message(PacketBuffer(data))
  File "/home/hello-robot/.local/lib/python3.12/site-packages/natnet/nat_net_client.py", line 176, in __process_message
    data_descs = DataDescriptions.read_from_buffer(
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/hello-robot/.local/lib/python3.12/site-packages/natnet/data_descriptions.py", line 346, in read_from_buffer
    unpacked_data = desc_type.read_from_buffer(buffer, protocol_version)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/hello-robot/.local/lib/python3.12/site-packages/natnet/data_descriptions.py", line 24, in read_from_buffer
    marker_names = [buffer.read_string() for _ in range(marker_count)]
                    ^^^^^^^^^^^^^^^^^^^^
  File "/home/hello-robot/.local/lib/python3.12/site-packages/natnet/packet_buffer.py", line 24, in read_string
    str_dec = str_enc.decode("utf-8")
              ^^^^^^^^^^^^^^^^^^^^^^^
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa7 in position 0: invalid start byte

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions