From 3f8c675690a52713e1b9fecb4dd4313dd575686e Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 17 Mar 2022 18:52:33 +0530 Subject: [PATCH] Catalog generation: Fix a rare crash when generating very large catalogs. Fixes #1965182 [cannot create epub nor mobi catalog](https://bugs.launchpad.net/calibre/+bug/1965182) --- .../library/catalogs/epub_mobi_builder.py | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/src/calibre/library/catalogs/epub_mobi_builder.py b/src/calibre/library/catalogs/epub_mobi_builder.py index b796725f6e..591b965c8d 100644 --- a/src/calibre/library/catalogs/epub_mobi_builder.py +++ b/src/calibre/library/catalogs/epub_mobi_builder.py @@ -1377,21 +1377,15 @@ class CatalogBuilder: (str): BeautifulSoup HTML snippet to be inserted into

line item entry. """ - soup = BeautifulSoup('') + prefix_char = prepare_string_for_xml(prefix_char or NBSP) if self.opts.fmt == 'mobi': - codeTag = soup.new_tag("code") - if prefix_char is None: - codeTag.insert(0, NavigableString(NBSP)) - else: - codeTag.insert(0, NavigableString(prefix_char)) - return codeTag + tagname = 'code' + html = f'<{tagname}>{prefix_char}' else: - spanTag = soup.new_tag("span") - spanTag['class'] = "prefix" - if prefix_char is None: - prefix_char = NBSP - spanTag.insert(0, NavigableString(prefix_char)) - return spanTag + tagname = 'span' + html = f'<{tagname} class="prefix">{prefix_char}' + soup = BeautifulSoup(html) + return soup.find(tagname) def generate_author_anchor(self, author): """ Generate legal XHTML anchor.