Strip null character off udisks2 paths (#4215)

* Strip null character off udisks2 paths

* Fix circular import
This commit is contained in:
Mike Degatano 2023-03-31 10:23:30 -04:00 committed by GitHub
parent 852771fbcf
commit c9ee76f1d3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 35 additions and 27 deletions

View File

@ -32,7 +32,7 @@ from ..const import (
from ..interface import DBusInterfaceProxy, dbus_property from ..interface import DBusInterfaceProxy, dbus_property
from ..utils import dbus_connected from ..utils import dbus_connected
from .const import UDISKS2_DEFAULT_OPTIONS, FormatType from .const import UDISKS2_DEFAULT_OPTIONS, FormatType
from .data import FormatOptions from .data import FormatOptions, udisks2_bytes_to_path
from .filesystem import UDisks2Filesystem from .filesystem import UDisks2Filesystem
from .partition_table import UDisks2PartitionTable from .partition_table import UDisks2PartitionTable
@ -88,7 +88,7 @@ class UDisks2Block(DBusInterfaceProxy):
@dbus_property @dbus_property
def device(self) -> Path: def device(self) -> Path:
"""Return device file.""" """Return device file."""
return Path(bytes(self.properties[DBUS_ATTR_DEVICE]).decode()) return udisks2_bytes_to_path(self.properties[DBUS_ATTR_DEVICE])
@property @property
@dbus_property @dbus_property
@ -113,7 +113,7 @@ class UDisks2Block(DBusInterfaceProxy):
def symlinks(self) -> list[Path]: def symlinks(self) -> list[Path]:
"""Return list of symlinks.""" """Return list of symlinks."""
return [ return [
Path(bytes(symlink).decode(encoding="utf-8")) udisks2_bytes_to_path(symlink)
for symlink in self.properties[DBUS_ATTR_SYMLINKS] for symlink in self.properties[DBUS_ATTR_SYMLINKS]
] ]

View File

@ -11,6 +11,14 @@ from typing_extensions import NotRequired
from .const import EncryptType, EraseMode 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: def _optional_variant(signature: str, value: Any | None) -> Variant | None:
"""Output variant if value is not none.""" """Output variant if value is not none."""
return Variant(signature, value) if value is not None else None return Variant(signature, value) if value is not None else None

View File

@ -11,7 +11,7 @@ from ..const import (
from ..interface import DBusInterfaceProxy, dbus_property from ..interface import DBusInterfaceProxy, dbus_property
from ..utils import dbus_connected from ..utils import dbus_connected
from .const import UDISKS2_DEFAULT_OPTIONS from .const import UDISKS2_DEFAULT_OPTIONS
from .data import MountOptions, UnmountOptions from .data import MountOptions, UnmountOptions, udisks2_bytes_to_path
class UDisks2Filesystem(DBusInterfaceProxy): class UDisks2Filesystem(DBusInterfaceProxy):
@ -35,7 +35,7 @@ class UDisks2Filesystem(DBusInterfaceProxy):
def mount_points(self) -> list[Path]: def mount_points(self) -> list[Path]:
"""Return mount points.""" """Return mount points."""
return [ return [
Path(bytes(mount_point).decode()) udisks2_bytes_to_path(mount_point)
for mount_point in self.properties[DBUS_ATTR_MOUNT_POINTS] for mount_point in self.properties[DBUS_ATTR_MOUNT_POINTS]
] ]

View File

@ -208,11 +208,11 @@ FIXTURES: dict[str, BlockFixture] = {
UserspaceMountOptions=[], UserspaceMountOptions=[],
), ),
"/org/freedesktop/UDisks2/block_devices/sda": BlockFixture( "/org/freedesktop/UDisks2/block_devices/sda": BlockFixture(
Device=b"/dev/sda", Device=b"/dev/sda\x00",
PreferredDevice=b"/dev/sda", PreferredDevice=b"/dev/sda\x00",
Symlinks=[ Symlinks=[
b"/dev/disk/by-id/usb-SSK_SSK_Storage_DF56419883D56-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", b"/dev/disk/by-path/platform-xhci-hcd.1.auto-usb-0:1.4:1.0-scsi-0:0:0:0\x00",
], ],
DeviceNumber=2048, DeviceNumber=2048,
Id="by-id-usb-SSK_SSK_Storage_DF56419883D56-0:0", Id="by-id-usb-SSK_SSK_Storage_DF56419883D56-0:0",
@ -238,15 +238,15 @@ FIXTURES: dict[str, BlockFixture] = {
UserspaceMountOptions=[], UserspaceMountOptions=[],
), ),
"/org/freedesktop/UDisks2/block_devices/sda1": BlockFixture( "/org/freedesktop/UDisks2/block_devices/sda1": BlockFixture(
Device=b"/dev/sda1", Device=b"/dev/sda1\x00",
PreferredDevice=b"/dev/sda1", PreferredDevice=b"/dev/sda1\x00",
Symlinks=[ Symlinks=[
b"/dev/disk/by-id/usb-SSK_SSK_Storage_DF56419883D56-0:0-part1", b"/dev/disk/by-id/usb-SSK_SSK_Storage_DF56419883D56-0:0-part1\x00",
b"/dev/disk/by-label/hassos-data", b"/dev/disk/by-label/hassos-data\x00",
b"/dev/disk/by-partlabel/hassos-data-external", b"/dev/disk/by-partlabel/hassos-data-external\x00",
b"/dev/disk/by-partuuid/6f3f99f4-4d34-476b-b051-77886da57fa9", 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", 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", b"/dev/disk/by-uuid/b82b23cb-0c47-4bbb-acf5-2a2afa8894a2\x00",
], ],
DeviceNumber=2049, DeviceNumber=2049,
Id="by-id-usb-SSK_SSK_Storage_DF56419883D56-0:0-part1", Id="by-id-usb-SSK_SSK_Storage_DF56419883D56-0:0-part1",
@ -272,11 +272,11 @@ FIXTURES: dict[str, BlockFixture] = {
UserspaceMountOptions=[], UserspaceMountOptions=[],
), ),
"/org/freedesktop/UDisks2/block_devices/sdb": BlockFixture( "/org/freedesktop/UDisks2/block_devices/sdb": BlockFixture(
Device=b"/dev/sdb", Device=b"/dev/sdb\x00",
PreferredDevice=b"/dev/sdb", PreferredDevice=b"/dev/sdb\x00",
Symlinks=[ Symlinks=[
b"/dev/disk/by-id/usb-Generic_Flash_Disk_61BCDDB6-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", b"/dev/disk/by-path/platform-xhci-hcd.1.auto-usb-0:1.2:1.0-scsi-0:0:0:0\x00",
], ],
DeviceNumber=2064, DeviceNumber=2064,
Id="", Id="",
@ -302,12 +302,12 @@ FIXTURES: dict[str, BlockFixture] = {
UserspaceMountOptions=[], UserspaceMountOptions=[],
), ),
"/org/freedesktop/UDisks2/block_devices/sdb1": BlockFixture( "/org/freedesktop/UDisks2/block_devices/sdb1": BlockFixture(
Device=b"/dev/sdb1", Device=b"/dev/sdb1\x00",
PreferredDevice=b"/dev/sdb1", PreferredDevice=b"/dev/sdb1\x00",
Symlinks=[ Symlinks=[
b"/dev/disk/by-id/usb-Generic_Flash_Disk_61BCDDB6-0:0-part1", 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", 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", b"/dev/disk/by-uuid/2802-1EDE\x00",
], ],
DeviceNumber=2065, DeviceNumber=2065,
Id="by-uuid-2802-1EDE", Id="by-uuid-2802-1EDE",

View File

@ -54,7 +54,7 @@ FIXTURES: dict[str, FilesystemFixture] = {
MountPoints=[], Size=250058113024 MountPoints=[], Size=250058113024
), ),
"/org/freedesktop/UDisks2/block_devices/sdb1": FilesystemFixture( "/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( "/org/freedesktop/UDisks2/block_devices/zram1": FilesystemFixture(
MountPoints=[b"/var"], Size=0 MountPoints=[b"/var"], Size=0