Author: Armin Rigo <ar...@tunes.org> Branch: py3.5 Changeset: r89978:c0a9a513dbec Date: 2017-02-06 19:32 +0100 http://bitbucket.org/pypy/pypy/changeset/c0a9a513dbec/
Log: fix _lzma.py by copying the 3.5.2->3.5.3 diff diff --git a/lib_pypy/_lzma.py b/lib_pypy/_lzma.py --- a/lib_pypy/_lzma.py +++ b/lib_pypy/_lzma.py @@ -108,7 +108,7 @@ Always returns True for CHECK_NONE and CHECK_CRC32.""" return bool(m.lzma_check_is_supported(check)) -def catch_lzma_error(fun, *args): +def catch_lzma_error(fun, *args, ignore_buf_error=False): try: lzret = fun(*args) except: @@ -124,6 +124,8 @@ elif lzret == m.LZMA_OPTIONS_ERROR: raise LZMAError("Invalid or unsupported options") elif lzret == m.LZMA_BUF_ERROR: + if ignore_buf_error: + return m.LZMA_OK raise LZMAError("Insufficient buffer space") elif lzret == m.LZMA_PROG_ERROR: raise LZMAError("Internal error") @@ -589,6 +591,9 @@ lzs.next_in = buf lzs.avail_in = buf_len + if buf_len == 0: + return b"" + bufsiz = self._bufsiz if not (max_length < 0 or max_length > io.DEFAULT_BUFFER_SIZE): bufsiz = max_length @@ -733,7 +738,7 @@ lzs = self.lzs lzs.next_in = input_ = ffi.new('uint8_t[]', to_bytes(data)) - lzs.avail_in = len(data) + lzs.avail_in = input_len = len(data) outs = [ffi.new('uint8_t[]', BUFSIZ)] lzs.next_out, = outs lzs.avail_out = BUFSIZ @@ -742,7 +747,8 @@ while True: next_out_pos = int(ffi.cast('intptr_t', lzs.next_out)) - ret = catch_lzma_error(m.lzma_code, lzs, action) + ret = catch_lzma_error(m.lzma_code, lzs, action, + ignore_buf_error=(input_len==0 and lzs.avail_out > 0)) data_size = int(ffi.cast('intptr_t', lzs.next_out)) - next_out_pos if (action == m.LZMA_RUN and lzs.avail_in == 0) or \ (action == m.LZMA_FINISH and ret == m.LZMA_STREAM_END): _______________________________________________ pypy-commit mailing list pypy-commit@python.org https://mail.python.org/mailman/listinfo/pypy-commit