mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
MOBI debug: Fix handling of multiple CNCX records
This commit is contained in:
parent
542bb7b81b
commit
eab57e4f82
@ -214,10 +214,11 @@ class MOBIHeader(object): # {{{
|
|||||||
self.number_of_text_records, self.text_record_size = \
|
self.number_of_text_records, self.text_record_size = \
|
||||||
struct.unpack(b'>HH', self.raw[8:12])
|
struct.unpack(b'>HH', self.raw[8:12])
|
||||||
self.encryption_type_raw, = struct.unpack(b'>H', self.raw[12:14])
|
self.encryption_type_raw, = struct.unpack(b'>H', self.raw[12:14])
|
||||||
self.encryption_type = {0: 'No encryption',
|
self.encryption_type = {
|
||||||
|
0: 'No encryption',
|
||||||
1: 'Old mobipocket encryption',
|
1: 'Old mobipocket encryption',
|
||||||
2:'Mobipocket encryption'}.get(self.encryption_type_raw,
|
2: 'Mobipocket encryption'
|
||||||
repr(self.encryption_type_raw))
|
}.get(self.encryption_type_raw, repr(self.encryption_type_raw))
|
||||||
self.unknown = self.raw[14:16]
|
self.unknown = self.raw[14:16]
|
||||||
|
|
||||||
self.identifier = self.raw[16:20]
|
self.identifier = self.raw[16:20]
|
||||||
@ -768,15 +769,17 @@ class CNCX(object) : # {{{
|
|||||||
|
|
||||||
def __init__(self, records, codec):
|
def __init__(self, records, codec):
|
||||||
self.records = OrderedDict()
|
self.records = OrderedDict()
|
||||||
pos = 0
|
record_offset = 0
|
||||||
for record in records:
|
for record in records:
|
||||||
raw = record.raw
|
raw = record.raw
|
||||||
|
pos = 0
|
||||||
while pos < len(raw):
|
while pos < len(raw):
|
||||||
length, consumed = decint(raw[pos:])
|
length, consumed = decint(raw[pos:])
|
||||||
if length > 0:
|
if length > 0:
|
||||||
self.records[pos] = raw[pos+consumed:pos+consumed+length].decode(
|
self.records[pos+record_offset] = raw[
|
||||||
codec)
|
pos+consumed:pos+consumed+length].decode(codec)
|
||||||
pos += consumed+length
|
pos += consumed+length
|
||||||
|
record_offset += 0x10000
|
||||||
|
|
||||||
def __getitem__(self, offset):
|
def __getitem__(self, offset):
|
||||||
return self.records.get(offset)
|
return self.records.get(offset)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user