From dd20e427b5353c7e51fa9aec31bafb75ba1df80c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sun, 18 Mar 2012 13:27:00 +0530 Subject: [PATCH] ... --- src/calibre/ebooks/mobi/reader/headers.py | 2 ++ src/calibre/ebooks/mobi/reader/mobi6.py | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/calibre/ebooks/mobi/reader/headers.py b/src/calibre/ebooks/mobi/reader/headers.py index 20a31cde50..06d349d5de 100644 --- a/src/calibre/ebooks/mobi/reader/headers.py +++ b/src/calibre/ebooks/mobi/reader/headers.py @@ -186,6 +186,8 @@ class BookHeader(object): if len(raw) >= 0xF8: self.ncxidx, = struct.unpack_from(b'>L', raw, 0xF4) + # Ancient PRC files from Baen can have random values for + # mobi_version, so be conservative if self.mobi_version == 8 and len(raw) >= (0xF8 + 16): self.dividx, self.skelidx, self.datpidx, self.othidx = \ struct.unpack_from(b'>4L', raw, 0xF8) diff --git a/src/calibre/ebooks/mobi/reader/mobi6.py b/src/calibre/ebooks/mobi/reader/mobi6.py index 92bdd1d3bf..6dd789755d 100644 --- a/src/calibre/ebooks/mobi/reader/mobi6.py +++ b/src/calibre/ebooks/mobi/reader/mobi6.py @@ -107,7 +107,10 @@ class MobiReader(object): self.kf8_type = None k8i = getattr(self.book_header.exth, 'kf8_header', None) - if self.book_header.mobi_version == 8: + # Ancient PRC files from Baen can have random values for + # mobi_version, so be conservative + if (self.book_header.mobi_version == 8 and hasattr(self.book_header, + 'skelidx')): self.kf8_type = 'standalone' elif k8i is not None: # Check for joint mobi 6 and kf 8 file try: