Skip to content

Commit

Permalink
limit Seek() to file size or return error
Browse files Browse the repository at this point in the history
  • Loading branch information
cnvogelg committed Feb 2, 2025
1 parent 108e486 commit 0b0c60d
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 5 deletions.
14 changes: 11 additions & 3 deletions amitools/vamos/lib/DosLibrary.py
Original file line number Diff line number Diff line change
Expand Up @@ -756,12 +756,20 @@ def Seek(self, ctx, fh_b_addr, pos, mode):

old_pos = fh.tell()
new_pos = fh.seek(pos, whence)
log_dos.info("Seek(%s, %06x, %s) -> old_pos=%06x", fh, pos, mode_str, old_pos)
if new_pos == -1:
log_dos.info(
"Seek(%s, %d, %s) -> old_pos=%d new_pos=%d",
fh,
pos,
mode_str,
old_pos,
new_pos,
)
if new_pos < 0:
self.setioerr(ctx, ERROR_SEEK_ERROR)
return -1
else:
self.setioerr(ctx, 0)
return old_pos
return old_pos

def FGetC(self, ctx, fh_b_addr):
fh = self.file_mgr.get_by_b_addr(fh_b_addr, False)
Expand Down
17 changes: 15 additions & 2 deletions amitools/vamos/lib/dos/FileHandle.py
Original file line number Diff line number Diff line change
Expand Up @@ -183,10 +183,23 @@ def tell(self):
def seek(self, pos, whence):
"""set to position from whence
return -1 on error or new_pos
return -1 on error, -2 on too far or new_pos
"""
try:
return self.obj.seek(pos, whence)
new_pos = self.obj.seek(pos, whence)

# we have to limit seek to file size
stat = os.stat(self.obj.fileno())
file_size = stat.st_size

# if seek to far then limit to file size
if new_pos > file_size:
# seek to end
self.obj.seek(file_size, 0)
return -2

return new_pos

except IOError:
return -1

Expand Down

0 comments on commit 0b0c60d

Please sign in to comment.