diff --git a/src/calibre/ebooks/lit/reader.py b/src/calibre/ebooks/lit/reader.py index 1668d2bc5c..87d0a29088 100644 --- a/src/calibre/ebooks/lit/reader.py +++ b/src/calibre/ebooks/lit/reader.py @@ -643,11 +643,14 @@ class LitReader(object): self.drmlevel = 1 else: return - msdes.deskey(self._calculate_deskey(), msdes.DE1) - bookkey = msdes.des(self.get_file('/DRMStorage/DRMSealed')) - if bookkey[0] != '\000': - raise LitError('Unable to decrypt title key!') - self.bookkey = bookkey[1:9] + if self.drmlevel < 5: + msdes.deskey(self._calculate_deskey(), msdes.DE1) + bookkey = msdes.des(self.get_file('/DRMStorage/DRMSealed')) + if bookkey[0] != '\000': + raise LitError('Unable to decrypt title key!') + self.bookkey = bookkey[1:9] + else: + raise LitError('Cannot extract content from a DRM protected ebook') def _calculate_deskey(self): hashfiles = ['/meta', '/DRMStorage/DRMSource'] @@ -710,8 +713,6 @@ class LitReader(object): return content def _decrypt(self, content): - if self.drmlevel == 5: - raise LitError('Cannot extract content from a DRM protected ebook') msdes.deskey(self.bookkey, msdes.DE1) return msdes.des(content) diff --git a/src/calibre/ebooks/metadata/opf.py b/src/calibre/ebooks/metadata/opf.py index f5eb54bb6f..dcda78258a 100644 --- a/src/calibre/ebooks/metadata/opf.py +++ b/src/calibre/ebooks/metadata/opf.py @@ -1,10 +1,11 @@ -import cStringIO __license__ = 'GPL v3' __copyright__ = '2008, Kovid Goyal ' -import uuid '''Read/Write metadata from Open Packaging Format (.opf) files.''' import sys, re, os, glob +import cStringIO +import uuid +from urllib import unquote, quote from calibre import __appname__ from calibre.ebooks.metadata import MetaInformation @@ -25,7 +26,10 @@ class ManifestItem(Resource): @staticmethod def from_opf_manifest_item(item, basedir): if item.has_key('href'): - res = ManifestItem(item['href'], basedir=basedir, is_path=False) + href = item['href'] + if unquote(href) == href: + href = quote(href) + res = ManifestItem(href, basedir=basedir, is_path=False) mt = item.get('media-type', '').strip() if mt: res.mime_type = mt