mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
AZW3 Input: Do not fail to process files with invalid internal flow references.
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)
This commit is contained in:
parent
d23a30fc5c
commit
e9d7975609
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user