From 7633b69c8d237dc4ddf8b8f6bcc78c6ee4a627c1 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 6 Dec 2012 08:59:34 +0530 Subject: [PATCH] EPUB Input: Fix an infinite loop while trying to unzip a damaged EPUB file. Fixes #1086917 (Load never terminates epub file is truncated) --- src/calibre/utils/localunzip.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/calibre/utils/localunzip.py b/src/calibre/utils/localunzip.py index 81587ffa96..4fd3006076 100644 --- a/src/calibre/utils/localunzip.py +++ b/src/calibre/utils/localunzip.py @@ -152,6 +152,8 @@ def copy_compressed_file(src, size, dest): amt = min(size, 20*1024) while read < size: raw = src.read(min(size-read, amt)) + if not raw and read < size: + raise ValueError('Invalid ZIP file, local header is damaged') read += len(raw) dest.write(d.decompress(raw, 200*1024)) count = 0