Fix unintentional exception inspecting VMDK
It looks like a raise statement was left in the virtual_size property handler for VMDK, which should have been converted to a log at some point. All the other inspectors return zero for virtual_size if the format does not match or they are unable to parse the data. This converts that raise to a log, and adds a test to make sure we make it far enough in the processing of the complex VMDK format to ensure that behavior. Closes-Bug: #1983279 Change-Id: I0352ab6b2c00055de094ac5902b8d50941d06dcf
This commit is contained in:
parent
3b37f17d3b
commit
199722a65a
|
@ -567,7 +567,7 @@ class VMDKInspector(FileInspector):
|
||||||
else:
|
else:
|
||||||
vmdktype = b'formatnotfound'
|
vmdktype = b'formatnotfound'
|
||||||
if vmdktype != b'monolithicSparse':
|
if vmdktype != b'monolithicSparse':
|
||||||
raise ImageFormatError('Unsupported VMDK format %s' % vmdktype)
|
LOG.warning('Unsupported VMDK format %s', vmdktype)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
# If we have the descriptor, we definitely have the header
|
# If we have the descriptor, we definitely have the header
|
||||||
|
|
|
@ -153,6 +153,24 @@ class TestFormatInspectors(test_utils.BaseTestCase):
|
||||||
def test_vdi_invalid(self):
|
def test_vdi_invalid(self):
|
||||||
self._test_format_with_invalid_data('vdi')
|
self._test_format_with_invalid_data('vdi')
|
||||||
|
|
||||||
|
def test_vmdk_invalid_type(self):
|
||||||
|
fmt = format_inspector.get_inspector('vmdk')()
|
||||||
|
wrapper = format_inspector.InfoWrapper(open(__file__, 'rb'), fmt)
|
||||||
|
while True:
|
||||||
|
chunk = wrapper.read(32)
|
||||||
|
if not chunk:
|
||||||
|
break
|
||||||
|
|
||||||
|
wrapper.close()
|
||||||
|
|
||||||
|
fake_rgn = mock.MagicMock()
|
||||||
|
fake_rgn.complete = True
|
||||||
|
fake_rgn.data = b'foocreateType="someunknownformat"bar'
|
||||||
|
|
||||||
|
with mock.patch.object(fmt, 'has_region', return_value=True):
|
||||||
|
with mock.patch.object(fmt, 'region', return_value=fake_rgn):
|
||||||
|
self.assertEqual(0, fmt.virtual_size)
|
||||||
|
|
||||||
|
|
||||||
class TestFormatInspectorInfra(test_utils.BaseTestCase):
|
class TestFormatInspectorInfra(test_utils.BaseTestCase):
|
||||||
def _test_capture_region_bs(self, bs):
|
def _test_capture_region_bs(self, bs):
|
||||||
|
|
Loading…
Reference in New Issue