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 ..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]
]

View File

@ -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

View File

@ -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]
]

View File

@ -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",

View File

@ -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