Raise proper error when you try to load an empty qcow2 file

Fix #637
This commit is contained in:
Julien Duponchelle 2016-08-29 10:18:18 +02:00
parent 1885fe62a6
commit 042a69eecf
No known key found for this signature in database
GPG Key ID: CE8B29639E07F5E8
2 changed files with 10 additions and 1 deletions

View File

@ -62,7 +62,10 @@ class Qcow2:
with open(self.path, 'rb') as f:
content = f.read(struct.calcsize(struct_format))
self.magic, self.version, self.backing_file_offset, self.backing_file_size = struct.unpack_from(struct_format, content)
try:
self.magic, self.version, self.backing_file_offset, self.backing_file_size = struct.unpack_from(struct_format, content)
except struct.error:
raise Qcow2Error("Invalid file header for {}".format(self.path))
if self.magic != 1363560955: # The first 4 bytes contain the characters 'Q', 'F', 'I' followed by 0xfb.
raise Qcow2Error("Invalid magic for {}".format(self.path))

View File

@ -56,6 +56,12 @@ def test_invalid_file():
Qcow2("tests/resources/nvram_iou")
def test_invalid_empty_file(tmpdir):
open(str(tmpdir / 'a'), 'w+').close()
with pytest.raises(Qcow2Error):
Qcow2(str(tmpdir / 'a'))
@pytest.mark.skipif(qemu_img() is None, reason="qemu-img is not available")
def test_rebase(tmpdir, loop):
shutil.copy("tests/resources/empty8G.qcow2", str(tmpdir / "empty16G.qcow2"))