diff --git a/py7zr/py7zr.py b/py7zr/py7zr.py index f9156031..9f3c7fa6 100644 --- a/py7zr/py7zr.py +++ b/py7zr/py7zr.py @@ -393,7 +393,6 @@ def __init__( raise TypeError(f"invalid file: {type(file)}") self.encoded_header_mode = True self.header_encryption = header_encryption - self._fileRefCnt = 1 try: if mode == "r": self._real_get_contents(password) @@ -428,9 +427,7 @@ def __exit__(self, exc_type, exc_val, exc_tb): self.close() def _fpclose(self) -> None: - assert self._fileRefCnt > 0 - self._fileRefCnt -= 1 - if not self._fileRefCnt and not self._filePassed: + if not self._filePassed: self.fp.close() def _real_get_contents(self, password) -> None: diff --git a/tests/data/data_corrupted.7z b/tests/data/data_corrupted.7z new file mode 100644 index 00000000..4b73fb74 Binary files /dev/null and b/tests/data/data_corrupted.7z differ diff --git a/tests/test_basic.py b/tests/test_basic.py index 2df6c9f1..2f4f52b0 100644 --- a/tests/test_basic.py +++ b/tests/test_basic.py @@ -5,6 +5,7 @@ import shutil from io import BytesIO +import _lzma import pytest import py7zr @@ -140,12 +141,22 @@ def test_digests(): @pytest.mark.basic -def test_digests_corrupted(): +def test_digests_crc_corrupted(): arcfile = os.path.join(testdata_path, "crc_corrupted.7z") with py7zr.SevenZipFile(arcfile) as archive: assert archive.test() is None archive.reset() assert archive.testzip() == "src/scripts/py7zr" + assert archive.fp.closed + + +@pytest.mark.basic +def test_digests_data_corrupted(): + arcfile = os.path.join(testdata_path, "data_corrupted.7z") + with pytest.raises(_lzma.LZMAError): + with py7zr.SevenZipFile(arcfile) as archive: + archive.testzip() + assert archive.fp.closed @pytest.mark.unit