From cb1476c8ffe52572e58022d2b8d3de663718200e Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Tue, 10 Nov 2020 16:12:44 +0530 Subject: [PATCH] Uses encoded library ids for safe transit --- src/calibre/gui2/ui.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/calibre/gui2/ui.py b/src/calibre/gui2/ui.py index f39553300e..676528fe7d 100644 --- a/src/calibre/gui2/ui.py +++ b/src/calibre/gui2/ui.py @@ -631,8 +631,16 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, EmailMixin, # {{{ def handle_url_action(self, action, path, query): import posixpath + + def decode_library_id(x): + if x == '_': + return getattr(self.current_db.new_api, 'server_library_id', None) or '_' + if x.startswith('hex-'): + return bytes.fromhex(x[4:]).decode('utf-8') + return x + if action == 'switch-library': - library_id = posixpath.basename(path) + library_id = decode_library_id(posixpath.basename(path)) library_path = self.library_broker.path_for_library_id(library_id) if library_path is not None and library_id != getattr(self.current_db.new_api, 'server_library_id', None): self.library_moved(library_path) @@ -641,6 +649,7 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, EmailMixin, # {{{ if len(parts) != 2: return library_id, book_id = parts + library_id = decode_library_id(library_id) try: book_id = int(book_id) except Exception: @@ -664,6 +673,7 @@ class Main(MainWindow, MainWindowMixin, DeviceMixin, EmailMixin, # {{{ if len(parts) != 3: return library_id, book_id, fmt = parts + library_id = decode_library_id(library_id) try: book_id = int(book_id) except Exception: