diff --git a/supervisor/dbus/udisks2/block.py b/supervisor/dbus/udisks2/block.py index c2e033d11..01c0cac09 100644 --- a/supervisor/dbus/udisks2/block.py +++ b/supervisor/dbus/udisks2/block.py @@ -32,7 +32,7 @@ from ..const import ( from ..interface import DBusInterfaceProxy, dbus_property from ..utils import dbus_connected from .const import UDISKS2_DEFAULT_OPTIONS, FormatType -from .data import FormatOptions +from .data import FormatOptions, udisks2_bytes_to_path from .filesystem import UDisks2Filesystem from .partition_table import UDisks2PartitionTable @@ -88,7 +88,7 @@ class UDisks2Block(DBusInterfaceProxy): @dbus_property def device(self) -> Path: """Return device file.""" - return Path(bytes(self.properties[DBUS_ATTR_DEVICE]).decode()) + return udisks2_bytes_to_path(self.properties[DBUS_ATTR_DEVICE]) @property @dbus_property @@ -113,7 +113,7 @@ class UDisks2Block(DBusInterfaceProxy): def symlinks(self) -> list[Path]: """Return list of symlinks.""" return [ - Path(bytes(symlink).decode(encoding="utf-8")) + udisks2_bytes_to_path(symlink) for symlink in self.properties[DBUS_ATTR_SYMLINKS] ] diff --git a/supervisor/dbus/udisks2/data.py b/supervisor/dbus/udisks2/data.py index bdc5915c8..1591bdec9 100644 --- a/supervisor/dbus/udisks2/data.py +++ b/supervisor/dbus/udisks2/data.py @@ -11,6 +11,14 @@ from typing_extensions import NotRequired from .const import EncryptType, EraseMode +def udisks2_bytes_to_path(path_bytes: bytearray) -> Path: + """Convert bytes to path object without null character on end.""" + if path_bytes and path_bytes[-1] == 0: + return Path(path_bytes[:-1].decode()) + + return Path(path_bytes.decode()) + + def _optional_variant(signature: str, value: Any | None) -> Variant | None: """Output variant if value is not none.""" return Variant(signature, value) if value is not None else None diff --git a/supervisor/dbus/udisks2/filesystem.py b/supervisor/dbus/udisks2/filesystem.py index 3befe9c81..6afdfc91d 100644 --- a/supervisor/dbus/udisks2/filesystem.py +++ b/supervisor/dbus/udisks2/filesystem.py @@ -11,7 +11,7 @@ from ..const import ( from ..interface import DBusInterfaceProxy, dbus_property from ..utils import dbus_connected from .const import UDISKS2_DEFAULT_OPTIONS -from .data import MountOptions, UnmountOptions +from .data import MountOptions, UnmountOptions, udisks2_bytes_to_path class UDisks2Filesystem(DBusInterfaceProxy): @@ -35,7 +35,7 @@ class UDisks2Filesystem(DBusInterfaceProxy): def mount_points(self) -> list[Path]: """Return mount points.""" return [ - Path(bytes(mount_point).decode()) + udisks2_bytes_to_path(mount_point) for mount_point in self.properties[DBUS_ATTR_MOUNT_POINTS] ] diff --git a/tests/dbus_service_mocks/udisks2_block.py b/tests/dbus_service_mocks/udisks2_block.py index cb861e662..81c4be6d6 100644 --- a/tests/dbus_service_mocks/udisks2_block.py +++ b/tests/dbus_service_mocks/udisks2_block.py @@ -208,11 +208,11 @@ FIXTURES: dict[str, BlockFixture] = { UserspaceMountOptions=[], ), "/org/freedesktop/UDisks2/block_devices/sda": BlockFixture( - Device=b"/dev/sda", - PreferredDevice=b"/dev/sda", + Device=b"/dev/sda\x00", + PreferredDevice=b"/dev/sda\x00", Symlinks=[ - b"/dev/disk/by-id/usb-SSK_SSK_Storage_DF56419883D56-0:0", - b"/dev/disk/by-path/platform-xhci-hcd.1.auto-usb-0:1.4:1.0-scsi-0:0:0:0", + b"/dev/disk/by-id/usb-SSK_SSK_Storage_DF56419883D56-0:0\x00", + b"/dev/disk/by-path/platform-xhci-hcd.1.auto-usb-0:1.4:1.0-scsi-0:0:0:0\x00", ], DeviceNumber=2048, Id="by-id-usb-SSK_SSK_Storage_DF56419883D56-0:0", @@ -238,15 +238,15 @@ FIXTURES: dict[str, BlockFixture] = { UserspaceMountOptions=[], ), "/org/freedesktop/UDisks2/block_devices/sda1": BlockFixture( - Device=b"/dev/sda1", - PreferredDevice=b"/dev/sda1", + Device=b"/dev/sda1\x00", + PreferredDevice=b"/dev/sda1\x00", Symlinks=[ - b"/dev/disk/by-id/usb-SSK_SSK_Storage_DF56419883D56-0:0-part1", - b"/dev/disk/by-label/hassos-data", - b"/dev/disk/by-partlabel/hassos-data-external", - b"/dev/disk/by-partuuid/6f3f99f4-4d34-476b-b051-77886da57fa9", - b"/dev/disk/by-path/platform-xhci-hcd.1.auto-usb-0:1.4:1.0-scsi-0:0:0:0-part1", - b"/dev/disk/by-uuid/b82b23cb-0c47-4bbb-acf5-2a2afa8894a2", + b"/dev/disk/by-id/usb-SSK_SSK_Storage_DF56419883D56-0:0-part1\x00", + b"/dev/disk/by-label/hassos-data\x00", + b"/dev/disk/by-partlabel/hassos-data-external\x00", + b"/dev/disk/by-partuuid/6f3f99f4-4d34-476b-b051-77886da57fa9\x00", + b"/dev/disk/by-path/platform-xhci-hcd.1.auto-usb-0:1.4:1.0-scsi-0:0:0:0-part1\x00", + b"/dev/disk/by-uuid/b82b23cb-0c47-4bbb-acf5-2a2afa8894a2\x00", ], DeviceNumber=2049, Id="by-id-usb-SSK_SSK_Storage_DF56419883D56-0:0-part1", @@ -272,11 +272,11 @@ FIXTURES: dict[str, BlockFixture] = { UserspaceMountOptions=[], ), "/org/freedesktop/UDisks2/block_devices/sdb": BlockFixture( - Device=b"/dev/sdb", - PreferredDevice=b"/dev/sdb", + Device=b"/dev/sdb\x00", + PreferredDevice=b"/dev/sdb\x00", Symlinks=[ - b"/dev/disk/by-id/usb-Generic_Flash_Disk_61BCDDB6-0:0", - b"/dev/disk/by-path/platform-xhci-hcd.1.auto-usb-0:1.2:1.0-scsi-0:0:0:0", + b"/dev/disk/by-id/usb-Generic_Flash_Disk_61BCDDB6-0:0\x00", + b"/dev/disk/by-path/platform-xhci-hcd.1.auto-usb-0:1.2:1.0-scsi-0:0:0:0\x00", ], DeviceNumber=2064, Id="", @@ -302,12 +302,12 @@ FIXTURES: dict[str, BlockFixture] = { UserspaceMountOptions=[], ), "/org/freedesktop/UDisks2/block_devices/sdb1": BlockFixture( - Device=b"/dev/sdb1", - PreferredDevice=b"/dev/sdb1", + Device=b"/dev/sdb1\x00", + PreferredDevice=b"/dev/sdb1\x00", Symlinks=[ - b"/dev/disk/by-id/usb-Generic_Flash_Disk_61BCDDB6-0:0-part1", - b"/dev/disk/by-path/platform-xhci-hcd.1.auto-usb-0:1.2:1.0-scsi-0:0:0:0-part1", - b"/dev/disk/by-uuid/2802-1EDE", + b"/dev/disk/by-id/usb-Generic_Flash_Disk_61BCDDB6-0:0-part1\x00", + b"/dev/disk/by-path/platform-xhci-hcd.1.auto-usb-0:1.2:1.0-scsi-0:0:0:0-part1\x00", + b"/dev/disk/by-uuid/2802-1EDE\x00", ], DeviceNumber=2065, Id="by-uuid-2802-1EDE", diff --git a/tests/dbus_service_mocks/udisks2_filesystem.py b/tests/dbus_service_mocks/udisks2_filesystem.py index ef8acf81e..afb0638ca 100644 --- a/tests/dbus_service_mocks/udisks2_filesystem.py +++ b/tests/dbus_service_mocks/udisks2_filesystem.py @@ -54,7 +54,7 @@ FIXTURES: dict[str, FilesystemFixture] = { MountPoints=[], Size=250058113024 ), "/org/freedesktop/UDisks2/block_devices/sdb1": FilesystemFixture( - MountPoints=[b"/mnt/data/supervisor/media/ext"], Size=67108864 + MountPoints=[b"/mnt/data/supervisor/media/ext\x00"], Size=67108864 ), "/org/freedesktop/UDisks2/block_devices/zram1": FilesystemFixture( MountPoints=[b"/var"], Size=0