From 598979a5be0f08b0fd64d73982433b30a6c28066 Mon Sep 17 00:00:00 2001 From: Hiroshi Miura Date: Sun, 27 Sep 2020 09:50:02 +0900 Subject: [PATCH 1/2] Backport fix BCJ issue (#250) - Add a test case reported on issue #249 - Fix BCJ filter Signed-off-by: Hiroshi Miura --- py7zr/compressor.py | 7 +++++++ tests/data/copy_bcj_1.7z | Bin 0 -> 10130 bytes tests/test_misc.py | 15 +++++++++++++++ 3 files changed, 22 insertions(+) create mode 100644 tests/data/copy_bcj_1.7z create mode 100644 tests/test_misc.py diff --git a/py7zr/compressor.py b/py7zr/compressor.py index 7c0e0d0c..b0e1d8e2 100644 --- a/py7zr/compressor.py +++ b/py7zr/compressor.py @@ -379,6 +379,11 @@ def _arm_code(self) -> int: return i def _x86_code(self) -> int: + """ + The code algorithm from liblzma/simple/x86.c + It is slightly different from LZMA-SDK's bra86.c + :return: buffer position + """ size = len(self.buffer) if size < 5: return 0 @@ -429,6 +434,8 @@ def _x86_code(self) -> int: else: buffer_pos += 1 self.prev_mask |= 1 + if self.buffer[buffer_pos + 3] in [0, 0xff]: + self.prev_mask |= 0x10 self.current_position += buffer_pos return buffer_pos diff --git a/tests/data/copy_bcj_1.7z b/tests/data/copy_bcj_1.7z new file mode 100644 index 0000000000000000000000000000000000000000..6fd28222387f48aa1d1d50cde7a415c9b6f8e951 GIT binary patch literal 10130 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 M(Gtn(>OT_w3;H={j{pDw literal 0 HcmV?d00001 diff --git a/tests/test_misc.py b/tests/test_misc.py new file mode 100644 index 00000000..97435329 --- /dev/null +++ b/tests/test_misc.py @@ -0,0 +1,15 @@ +import os +import pathlib + +import pytest + +import py7zr + +testdata_path = pathlib.Path(os.path.dirname(__file__)).joinpath('data') +os.umask(0o022) + + +@pytest.mark.files +def test_bcj_file(tmp_path): + with py7zr.SevenZipFile(testdata_path.joinpath('copy_bcj_1.7z').open(mode='rb')) as ar: + ar.extractall(tmp_path) From eabcd4938f95c6f09e2d42e918820abd6a7bbef3 Mon Sep 17 00:00:00 2001 From: Hiroshi Miura Date: Sun, 4 Oct 2020 16:17:20 +0900 Subject: [PATCH 2/2] Prepare for relase v0.9.9 Signed-off-by: Hiroshi Miura --- Changelog.rst | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/Changelog.rst b/Changelog.rst index 7b520083..c231363c 100644 --- a/Changelog.rst +++ b/Changelog.rst @@ -25,6 +25,14 @@ Removed Security -------- +`v0.9.9`_ +========= + +Fixed +----- + +* (backport) Fix BCJ filter issue failing a certain data when LZMA+BCJ compression(#240, #250) + `v0.9.8`_ ========= @@ -774,7 +782,8 @@ Changed .. History links -.. _Unreleased: https://github.com/miurahr/py7zr/compare/v0.9.8...HEAD +.. _Unreleased: https://github.com/miurahr/py7zr/compare/v0.9.9...HEAD +.. _v0.9.9: https://github.com/miurahr/py7zr/compare/v0.9.8...v0.9.9 .. _v0.9.8: https://github.com/miurahr/py7zr/compare/v0.9.7...v0.9.8 .. _v0.9.7: https://github.com/miurahr/py7zr/compare/v0.9.6...v0.9.7 .. _v0.9.6: https://github.com/miurahr/py7zr/compare/v0.9.5...v0.9.6