diff --git a/dangerzone/isolation_provider/base.py b/dangerzone/isolation_provider/base.py index ae28999..261962a 100644 --- a/dangerzone/isolation_provider/base.py +++ b/dangerzone/isolation_provider/base.py @@ -336,7 +336,10 @@ class IsolationProvider(ABC): document, p, timeout_grace=timeout_grace, timeout_force=timeout_force ) - if getattr(sys, "dangerzone_dev", False): + # Read the stderr of the process only if: + # * Dev mode is enabled. + # * The process has exited (else we risk hanging). + if getattr(sys, "dangerzone_dev", False) and p.poll() is not None: assert p.stderr debug_log = read_debug_text(p.stderr, MAX_CONVERSION_LOG_CHARS) log.info( diff --git a/dangerzone/isolation_provider/container.py b/dangerzone/isolation_provider/container.py index 33f5300..8259361 100644 --- a/dangerzone/isolation_provider/container.py +++ b/dangerzone/isolation_provider/container.py @@ -1,13 +1,12 @@ import gzip -import json import logging import os import platform import shlex import shutil +import signal import subprocess -import sys -from typing import Any, List, Tuple +from typing import List, Tuple from ..document import Document from ..util import get_tmp_dir # NOQA : required for mocking in our tests. diff --git a/dangerzone/isolation_provider/qubes.py b/dangerzone/isolation_provider/qubes.py index 296bf85..dd1f181 100644 --- a/dangerzone/isolation_provider/qubes.py +++ b/dangerzone/isolation_provider/qubes.py @@ -1,15 +1,12 @@ -import asyncio import io import logging import os -import shutil import subprocess import sys import zipfile from pathlib import Path -from typing import IO, Optional +from typing import IO -from ..conversion import errors from ..conversion.common import running_on_qubes from ..document import Document from ..util import get_resource_path diff --git a/tests/isolation_provider/base.py b/tests/isolation_provider/base.py index abf4889..72f3893 100644 --- a/tests/isolation_provider/base.py +++ b/tests/isolation_provider/base.py @@ -29,7 +29,7 @@ class IsolationProviderTest: p = provider.start_doc_to_pixels_proc(doc) with pytest.raises(errors.ConverterProcException): - provider.doc_to_pixels(doc, tmpdir, p) + provider._convert(doc, tmpdir, None, p) assert provider.get_proc_exception(p) == errors.MaxPagesException def test_max_pages_client_enforcement( @@ -46,7 +46,7 @@ class IsolationProviderTest: doc = Document(sample_doc) p = provider.start_doc_to_pixels_proc(doc) with pytest.raises(errors.MaxPagesException): - provider.doc_to_pixels(doc, tmpdir, p) + provider._convert(doc, tmpdir, None, p) def test_max_dimensions( self, @@ -60,12 +60,12 @@ class IsolationProviderTest: doc = Document(sample_bad_width) p = provider.start_doc_to_pixels_proc(doc) with pytest.raises(errors.MaxPageWidthException): - provider.doc_to_pixels(doc, tmpdir, p) + provider._convert(doc, tmpdir, None, p) doc = Document(sample_bad_height) p = provider.start_doc_to_pixels_proc(doc) with pytest.raises(errors.MaxPageHeightException): - provider.doc_to_pixels(doc, tmpdir, p) + provider._convert(doc, tmpdir, None, p) class IsolationProviderTermination: