From fbc770710b8df79e1a22bb71e71196443c01bb0f Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 30 Jul 2011 13:56:45 -0600 Subject: [PATCH] New MOBI Output: Write a pad record to ensure the first non text record starts at a 4byte boundary --- src/calibre/ebooks/mobi/writer2/main.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/calibre/ebooks/mobi/writer2/main.py b/src/calibre/ebooks/mobi/writer2/main.py index 7421bcb82b..1819850827 100644 --- a/src/calibre/ebooks/mobi/writer2/main.py +++ b/src/calibre/ebooks/mobi/writer2/main.py @@ -201,6 +201,7 @@ class MobiWriter(object): self.text_length = len(text) text = StringIO(text) nrecords = 0 + records_size = 0 if self.compression != UNCOMPRESSED: self.oeb.logger.info(' Compressing markup content...') @@ -214,9 +215,15 @@ class MobiWriter(object): data += pack(b'>B', len(overlap)) self.records.append(data) + records_size += len(data) nrecords += 1 self.last_text_record_idx = nrecords + self.first_non_text_record_idx = nrecords + 1 + # Pad so that the next records starts at a 4 byte boundary + if records_size % 4 != 0: + self.records.append(b'\x00'*(records_size % 4)) + self.first_non_text_record_idx += 1 def read_text_record(self, text): ''' @@ -338,7 +345,7 @@ class MobiWriter(object): # 0x40 - 0x43 : Offset of first non-text record record0.write(pack(b'>I', - self.last_text_record_idx + 1)) + self.first_non_text_record_idx)) # 0x44 - 0x4b : title offset, title length record0.write(pack(b'>II',