Merge "Add QED format detection to format_inspector" into stable/2024.1
This commit is contained in:
commit
4ac3c1b0f8
@ -366,6 +366,23 @@ class QcowInspector(FileInspector):
|
|||||||
not self.has_unknown_features)
|
not self.has_unknown_features)
|
||||||
|
|
||||||
|
|
||||||
|
class QEDInspector(FileInspector):
|
||||||
|
def __init__(self, tracing=False):
|
||||||
|
super().__init__(tracing)
|
||||||
|
self.new_region('header', CaptureRegion(0, 512))
|
||||||
|
|
||||||
|
@property
|
||||||
|
def format_match(self):
|
||||||
|
if not self.region('header').complete:
|
||||||
|
return False
|
||||||
|
return self.region('header').data.startswith(b'QED\x00')
|
||||||
|
|
||||||
|
def safety_check(self):
|
||||||
|
# QED format is not supported by anyone, but we want to detect it
|
||||||
|
# and mark it as just always unsafe.
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
# The VHD (or VPC as QEMU calls it) format consists of a big-endian
|
# The VHD (or VPC as QEMU calls it) format consists of a big-endian
|
||||||
# 512-byte "footer" at the beginning of the file with various
|
# 512-byte "footer" at the beginning of the file with various
|
||||||
# information, most of which does not matter to us:
|
# information, most of which does not matter to us:
|
||||||
@ -879,6 +896,7 @@ def get_inspector(format_name):
|
|||||||
'vhdx': VHDXInspector,
|
'vhdx': VHDXInspector,
|
||||||
'vmdk': VMDKInspector,
|
'vmdk': VMDKInspector,
|
||||||
'vdi': VDIInspector,
|
'vdi': VDIInspector,
|
||||||
|
'qed': QEDInspector,
|
||||||
}
|
}
|
||||||
|
|
||||||
return formats.get(format_name)
|
return formats.get(format_name)
|
||||||
|
@ -179,6 +179,12 @@ class TestFormatInspectors(test_utils.BaseTestCase):
|
|||||||
# a local file.
|
# a local file.
|
||||||
self.assertLess(fmt.actual_size, file_size)
|
self.assertLess(fmt.actual_size, file_size)
|
||||||
|
|
||||||
|
def test_qed_always_unsafe(self):
|
||||||
|
img = self._create_img('qed', 10 * units.Mi)
|
||||||
|
fmt = format_inspector.get_inspector('qed').from_file(img)
|
||||||
|
self.assertTrue(fmt.format_match)
|
||||||
|
self.assertFalse(fmt.safety_check())
|
||||||
|
|
||||||
def _test_vmdk_bad_descriptor_offset(self, subformat=None):
|
def _test_vmdk_bad_descriptor_offset(self, subformat=None):
|
||||||
format_name = 'vmdk'
|
format_name = 'vmdk'
|
||||||
image_size = 10 * units.Mi
|
image_size = 10 * units.Mi
|
||||||
|
Loading…
Reference in New Issue
Block a user