miurahr / py7zr

7zip in python3 with ZStandard, PPMd, LZMA2, LZMA1, Delta, BCJ, BZip2, and Deflate compressions, and AES encryption.

Home Page:https://pypi.org/project/py7zr/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Exception when appending a directory to existing archive

erdalkaraca opened this issue · comments

When opening an archive to append a directory (recursively) an exception is raised:

Traceback (most recent call last):
  [...]
  File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\py7zr\py7zr.py", line 410, in __exit__
    self.close()
  File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\py7zr\py7zr.py", line 1077, in close
    self._write_flush()
  File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\py7zr\py7zr.py", line 685, in _write_flush
    self._write_header()
  File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\py7zr\py7zr.py", line 693, in _write_header
    encrypted=self.header_encryption,
  File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\py7zr\archiveinfo.py", line 1004, in write
    startpos, headercrc = self._encode_header(file, afterheader, filters)
  File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\py7zr\archiveinfo.py", line 971, in _encode_header
    _, raw_header_len, raw_crc = self.write(buf, 0, False)
  File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\py7zr\archiveinfo.py", line 1009, in write
    self.main_streams.write(crcfile)
  File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\py7zr\archiveinfo.py", line 664, in write
    self.substreamsinfo.write(file)
  File "C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\lib\site-packages\py7zr\archiveinfo.py", line 616, in write
    write_uint64(file, self.unpacksizes[idx])
IndexError: list index out of range

I am not sure, but a fix seems to be the following modification in archiveinfo.py:

image

Fix: indent the idx += 1 into the if clause.

before:
image

If this fix sounds reasonable, I can create a PR.

A pull-request is always welcome. It is great if you add a test case for regression test.