From 0a9778caa3406f1c56d8aef63ab647894d2f5aa1 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 15 Dec 2021 13:36:24 +0530 Subject: [PATCH] py3 compat: Fix PDB ereader output broken in calibre 5 Fixes #1954889 [Error when converting to pdb ereader](https://bugs.launchpad.net/calibre/+bug/1954889) --- src/calibre/ebooks/pdb/ereader/writer.py | 2 +- src/calibre/ebooks/pdb/header.py | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/calibre/ebooks/pdb/ereader/writer.py b/src/calibre/ebooks/pdb/ereader/writer.py index cae9f3838c..2f13147180 100644 --- a/src/calibre/ebooks/pdb/ereader/writer.py +++ b/src/calibre/ebooks/pdb/ereader/writer.py @@ -67,7 +67,7 @@ class Writer(FormatWriter): lengths = [len(i) if i not in images else len(i[0]) + len(i[1]) for i in sections] - pdbHeaderBuilder = PdbHeaderBuilder(IDENTITY, metadata[0].partition('\x00')[0]) + pdbHeaderBuilder = PdbHeaderBuilder(IDENTITY, metadata[0].partition(b'\x00')[0]) pdbHeaderBuilder.build_header(lengths, out_stream) for item in sections: diff --git a/src/calibre/ebooks/pdb/header.py b/src/calibre/ebooks/pdb/header.py index 4f3bd475d0..b85be834a1 100644 --- a/src/calibre/ebooks/pdb/header.py +++ b/src/calibre/ebooks/pdb/header.py @@ -70,7 +70,9 @@ class PdbHeaderBuilder: def __init__(self, identity, title): self.identity = identity.ljust(3, '\x00')[:8].encode('utf-8') - self.title = b'%s\x00' % re.sub('[^-A-Za-z0-9 ]+', '_', title).ljust(31, '\x00')[:31].encode('ascii', 'replace') + if isinstance(title, str): + title = title.encode('ascii', 'replace') + self.title = b'%s\x00' % re.sub(b'[^-A-Za-z0-9 ]+', b'_', title).ljust(31, b'\x00')[:31] def build_header(self, section_lengths, out_stream): '''