Skip to content

Commit

Permalink
Silence CRC check during seeking
Browse files Browse the repository at this point in the history
Fixes: #73
  • Loading branch information
markokr committed Sep 17, 2023
1 parent 3e8bfb3 commit 92c6e3e
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 2 deletions.
10 changes: 8 additions & 2 deletions rarfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -2240,6 +2240,7 @@ class RarExtFile(io.RawIOBase):
_remain = 0
_returncode = 0
_md_context = None
_seeking = False

def _open_extfile(self, parser, inf):
self.name = inf.filename
Expand All @@ -2248,7 +2249,10 @@ def _open_extfile(self, parser, inf):

if self._fd:
self._fd.close()
md_class = self._inf._md_class or NoHashContext
if self._seeking:
md_class = NoHashContext
else:
md_class = self._inf._md_class or NoHashContext
self._md_context = md_class()
self._fd = None
self._remain = self._inf.file_size
Expand Down Expand Up @@ -2339,7 +2343,9 @@ def seek(self, offset, whence=0):
"""

# disable crc check when seeking
self._md_context = NoHashContext()
if not self._seeking:
self._md_context = NoHashContext()
self._seeking = True

fsize = self._inf.file_size
cur_ofs = self.tell()
Expand Down
28 changes: 28 additions & 0 deletions test/test_seek.py
Original file line number Diff line number Diff line change
Expand Up @@ -104,3 +104,31 @@ def test_seek_ioopen():
with io.open(ARC, "rb") as f:
run_arc(f, "io.open")


def run_seek_middle(fn, entry):
rar = rarfile.RarFile(fn)
file = rar.open(entry)
assert file.read(1) == b"0"
assert file.read(1) == b"0"
assert file.read(1) == b"0"
assert file.read(1) == b"\n"
file.read()

file.seek(0)
assert file.read(1) == b"0"
assert file.read(1) == b"0"
assert file.read(1) == b"0"
assert file.read(1) == b"\n"
file.read()

file.seek(2)
assert file.read(1) == b"0"
assert file.read(1) == b"\n"
file.read()

def test_seek_middle1():
run_seek_middle("test/files/seektest.rar", "stest1.txt")

def test_seek_middle2():
run_seek_middle("test/files/seektest.rar", "stest2.txt")

0 comments on commit 92c6e3e

Please sign in to comment.