"""Reached EOF."""
remainder = 0
msg = 0
- def __init__ (self, n, msg=None):
+ def __init__ (self, n=None, msg=None):
self.remainder = n
self.msg = msg
def hdr_read_stream (instr):
data = instr.read(PDTCRYPT_HDR_SIZE)
ldata = len (data)
- if ldata != PDTCRYPT_HDR_SIZE:
- raise EndOfFile (ldata,
- "read: expected %d B, received %d B"
- % (PDTCRYPT_HDR_SIZE, len (data)))
+ if ldata == 0:
+ raise EndOfFile
+ elif ldata != PDTCRYPT_HDR_SIZE:
+ raise InvalidHeader ("hdr_read_stream: expected %d B, received %d B"
+ % (PDTCRYPT_HDR_SIZE, ldata))
return hdr_read (data)
self.lasthdr = self.fileobj.tell ()
try:
hdr = crypto.hdr_read_stream (self.fileobj)
- except crypto.EndOfFile as exn:
- if exn.remainder == 0:
- raise EOFHeaderError("end of file header")
- raise DecryptionError ("Crypto.hdr_read_stream(): hit EOF "
- "reading header %r" % (self.fileobj)) \
- from exn
+ except crypto.EndOfFile:
+ return False
except crypto.InvalidHeader:
raise DecryptionError ("Crypto.hdr_read_stream(): error “%s” "
"processing %r" % (hdr, self.fileobj)) \
from exn
self.remainder = hdr ["ctsize"] # distance to next header
- return self.encryption.next (hdr)
+ self.encryption.next (hdr)
+
+ return True
def _finalize_read_encrypt (self):
if self.encryption is not None:
if self.remainder <= 0:
# prepare next object
- self._init_read_encrypt ()
+ if self._init_read_encrypt () is False: # EOF
+ buf = None
+ break # while
+
# only read up to the end of the encrypted object
todo = min (size, self.remainder)
buf = self.fileobj.read(todo)