From 4f01b09ded8a0aa21f273596051ca8f32426bef2 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Sat, 11 Sep 2010 09:21:29 +0100 Subject: [PATCH 1/2] Check in the metadata class that custom field names begin with '#' --- src/calibre/ebooks/metadata/book/base.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/calibre/ebooks/metadata/book/base.py b/src/calibre/ebooks/metadata/book/base.py index 69a3c42f4d..d0b428bf96 100644 --- a/src/calibre/ebooks/metadata/book/base.py +++ b/src/calibre/ebooks/metadata/book/base.py @@ -156,6 +156,9 @@ class Metadata(object): the key name not the label ''' if field is not None: + if not field.startswith('#'): + raise AttributeError( + 'Custom field name %s must begin with \'#\''%repr(field)) if metadata is None: traceback.print_stack() metadata = copy.deepcopy(metadata) From afe5546a15aa34fec849c875cb2b9b139c36ebd6 Mon Sep 17 00:00:00 2001 From: Charles Haley <> Date: Sat, 11 Sep 2010 09:23:03 +0100 Subject: [PATCH 2/2] Avoid spurious exceptions when adding None custom metadata --- src/calibre/ebooks/metadata/book/base.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/calibre/ebooks/metadata/book/base.py b/src/calibre/ebooks/metadata/book/base.py index d0b428bf96..be9a4675c0 100644 --- a/src/calibre/ebooks/metadata/book/base.py +++ b/src/calibre/ebooks/metadata/book/base.py @@ -161,6 +161,7 @@ class Metadata(object): 'Custom field name %s must begin with \'#\''%repr(field)) if metadata is None: traceback.print_stack() + return metadata = copy.deepcopy(metadata) if '#value#' not in metadata: if metadata['datatype'] == 'text' and metadata['is_multiple']: