From eab43eb63e5ef4e5db33ebfc1a016209d678198e Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 22 Jan 2019 12:29:37 +0530 Subject: [PATCH] Nicer error message for /cdb/set-fields with invalid data --- src/calibre/srv/cdb.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/calibre/srv/cdb.py b/src/calibre/srv/cdb.py index 8a7ffbb69b..9f04e77392 100644 --- a/src/calibre/srv/cdb.py +++ b/src/calibre/srv/cdb.py @@ -140,9 +140,15 @@ def cdb_set_fields(ctx, rd, book_id, library_id): data = json_loads(raw) else: raise HTTPBadRequest('Only JSON or msgpack requests are supported') - changes, loaded_book_ids = data['changes'], frozenset(map(int, data['loaded_book_ids'])) except Exception: raise HTTPBadRequest('Invalid encoded data') + try: + changes, loaded_book_ids = data['changes'], frozenset(map(int, data.get('loaded_book_ids', ()))) + if not isinstance(changes, dict): + raise TypeError('changes must be a dict') + except Exception: + raise HTTPBadRequest( + '''Data must be of the form {'changes': {'title': 'New Title', ...}, 'loaded_book_ids':[book_id1, book_id2, ...]'}''') dirtied = set() cdata = changes.pop('cover', False) if cdata is not False: