diff --git a/qubes/tests/api_admin.py b/qubes/tests/api_admin.py index 7dee1cb2d..9c2aa53f4 100644 --- a/qubes/tests/api_admin.py +++ b/qubes/tests/api_admin.py @@ -4252,6 +4252,10 @@ def test_660_vm_device_denied_list_empty(self): self.assertEqual(actual, "") self.assertFalse(self.app.save.called) + self.vm.devices_denied = None + self.assertEqual(self.vm.devices_denied, "") + self.assertFalse(self.app.save.called) + def test_661_vm_device_denied_list(self): self.vm.devices_denied = "b******p012345pff**2*" actual = self.call_mgmt_func( diff --git a/qubes/vm/qubesvm.py b/qubes/vm/qubesvm.py index c652ce298..9c8d67cca 100644 --- a/qubes/vm/qubesvm.py +++ b/qubes/vm/qubesvm.py @@ -137,10 +137,12 @@ def _setter_default_user(self, prop, value): def _setter_denied_list(self, prop, value): """Helper for setting denied list""" - value = str(value) - if len(value) == 0: - return value + # Although the property has type str, loading an empty value from XML leads + # to None. + if not value: + return "" + value = str(value) # remove duplicates value = "".join( sorted(map(repr, set(DeviceInterface.from_str_bulk(value))))