Replace use of pickle for sending data to viewer print worker

This commit is contained in:
Kovid Goyal 2019-03-15 14:39:06 +05:30
parent 74e316e20b
commit 6ad782cb29
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -6,7 +6,7 @@ from __future__ import (unicode_literals, division, absolute_import,
__license__ = 'GPL v3'
__copyright__ = '2015, Kovid Goyal <kovid at kovidgoyal.net>'
import os, subprocess, cPickle, sys
import os, subprocess, sys
from threading import Thread
from PyQt5.Qt import (
@ -22,6 +22,7 @@ from calibre.gui2.viewer.main import vprefs
from calibre.utils.icu import numeric_sort_key
from calibre.utils.ipc.simple_worker import start_pipe_worker
from calibre.utils.filenames import expanduser
from calibre.utils.serialize import msgpack_dumps, msgpack_loads
class PrintDialog(Dialog):
@ -143,7 +144,7 @@ class DoPrint(Thread):
try:
with PersistentTemporaryFile('print-to-pdf-log.txt') as f:
p = self.worker = start_pipe_worker('from calibre.gui2.viewer.printing import do_print; do_print()', stdout=f, stderr=subprocess.STDOUT)
p.stdin.write(cPickle.dumps(self.data, -1)), p.stdin.flush(), p.stdin.close()
p.stdin.write(msgpack_dumps(self.data)), p.stdin.flush(), p.stdin.close()
rc = p.wait()
if rc != 0:
f.seek(0)
@ -159,7 +160,8 @@ class DoPrint(Thread):
def do_print():
from calibre.customize.ui import plugin_for_input_format
data = cPickle.loads(sys.stdin.read())
stdin = getattr(sys.stdin, 'buffer', sys.stdin)
data = msgpack_loads(stdin.read())
ext = data['input'].lower().rpartition('.')[-1]
input_plugin = plugin_for_input_format(ext)
args = ['ebook-convert', data['input'], data['output'], '--paper-size', data['paper_size'], '--pdf-add-toc',