From e9d7975609f950f5879e3d863303a60457657f73 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 27 Dec 2017 08:41:17 +0530 Subject: [PATCH] AZW3 Input: Do not fail to process files with invalid internal flow references. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #1740140 [calibre, version 3.14.0 ERRO: Could not open e-book: Falha ao ler o livro, C:\Users\Admin\Google Drive\Work\Calibre\Livros\Allan Kardec\O Evangelho Segundo o Espiritismo (3146)\O Evangelho Segundo o Espiritis - Allan Kardec.azw3 clique em "Mostrar detalhes" para mais informações. Traceback (most recent call last): File "site-packages\calibre\utils\ipc\simple_worker.py", line 284, in main File "site-packages\calibre\ebooks\oeb\iterator\book.py", line 64, in extract_book File "site-packages\calibre\customize\conversion.py", line 245, in __call__ File "site-packages\calibre\ebooks\conversion\plugins\mobi_input.py", line 44, in convert File "site-packages\calibre\ebooks\mobi\reader\mobi8.py", line 114, in __call__ File "site-packages\calibre\ebooks\mobi\reader\mobi8.py", line 465, in expand_text File "site-packages\calibre\ebooks\mobi\reader\markup.py", line 356, in expand_mobi8_markup File "site-packages\calibre\ebooks\mobi\reader\markup.py", line 204, in update_flow_links IndexError: cannot fit 'long' into an index-sized integer](https://bugs.launchpad.net/calibre/+bug/1740140) --- src/calibre/ebooks/mobi/reader/markup.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/calibre/ebooks/mobi/reader/markup.py b/src/calibre/ebooks/mobi/reader/markup.py index 8a35db6d0e..54e4ac38b6 100644 --- a/src/calibre/ebooks/mobi/reader/markup.py +++ b/src/calibre/ebooks/mobi/reader/markup.py @@ -200,14 +200,19 @@ def update_flow_links(mobi8_reader, resource_map, log): tag = srcpieces[j] if tag.startswith('<'): for m in re.finditer(flow_pattern, tag): - num = int(m.group(1), 32) - fi = mr.flowinfo[num] - if fi.format == 'inline': - flowtext = mr.flows[num] - tag = flowtext + try: + num = int(m.group(1), 32) + fi = mr.flowinfo[num] + except IndexError: + log.warn('Ignoring invalid flow reference in tag', tag) + tag = '' else: - replacement = '"../' + fi.dir + '/' + fi.fname + '"' - tag = flow_pattern.sub(replacement, tag, 1) + if fi.format == 'inline': + flowtext = mr.flows[num] + tag = flowtext + else: + replacement = '"../' + fi.dir + '/' + fi.fname + '"' + tag = flow_pattern.sub(replacement, tag, 1) srcpieces[j] = tag flow = "".join(srcpieces) @@ -390,4 +395,3 @@ def expand_mobi8_markup(mobi8_reader, resource_map, log): f.write(flow.encode('utf-8')) return spine -