From 42810e0b94e1d7c76e208bdc979c58ecdeea22ce Mon Sep 17 00:00:00 2001 From: deeplow Date: Wed, 4 Oct 2023 11:56:49 +0100 Subject: [PATCH] Catch out of /tmp space errors in server --- dangerzone/conversion/doc_to_pixels.py | 32 +++++++++++++------ .../conversion/doc_to_pixels_qubes_wrapper.py | 3 ++ dangerzone/conversion/errors.py | 11 +++++++ 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/dangerzone/conversion/doc_to_pixels.py b/dangerzone/conversion/doc_to_pixels.py index e828dbb..42841b1 100644 --- a/dangerzone/conversion/doc_to_pixels.py +++ b/dangerzone/conversion/doc_to_pixels.py @@ -33,16 +33,25 @@ class DocumentToPixels(DangerzoneConverter): pass async def write_page_width(self, width: int, filename: str) -> None: - with open(filename, "w") as f: - f.write(str(width)) + try: + with open(filename, "w") as f: + f.write(str(width)) + except OSError: + raise errors.ServerOutOfTempSpaceError() async def write_page_height(self, height: int, filename: str) -> None: - with open(filename, "w") as f: - f.write(str(height)) + try: + with open(filename, "w") as f: + f.write(str(height)) + except OSError: + raise errors.ServerOutOfTempSpaceError() async def write_page_data(self, data: bytes, filename: str) -> None: - with open(filename, "wb") as f: - f.write(data) + try: + with open(filename, "wb") as f: + f.write(data) + except OSError: + raise errors.ServerOutOfTempSpaceError() async def convert(self) -> None: conversions: Dict[str, Dict[str, Optional[str]]] = { @@ -410,13 +419,18 @@ async def main() -> int: error_code = 0 # Success! except errors.ConversionException as e: # Expected Errors error_code = e.error_code + except OSError: + raise errors.ServerOutOfTempSpaceError() except Exception as e: converter.update_progress(str(e), error=True) error_code = errors.UnexpectedConversionError.error_code if not running_on_qubes(): - # Write debug information (containers version) - with open("/tmp/dangerzone/captured_output.txt", "wb") as container_log: - container_log.write(converter.captured_output) + try: + # Write debug information (containers version) + with open("/tmp/dangerzone/captured_output.txt", "wb") as container_log: + container_log.write(converter.captured_output) + except OSError: + error_code = errors.ServerOutOfTempSpaceError.error_code return error_code diff --git a/dangerzone/conversion/doc_to_pixels_qubes_wrapper.py b/dangerzone/conversion/doc_to_pixels_qubes_wrapper.py index b94c51f..fd7e8bf 100644 --- a/dangerzone/conversion/doc_to_pixels_qubes_wrapper.py +++ b/dangerzone/conversion/doc_to_pixels_qubes_wrapper.py @@ -95,6 +95,9 @@ async def main() -> None: except errors.ConversionException as e: await write_bytes(str(e).encode(), file=sys.stderr) sys.exit(e.error_code) + except OSError: + error_code = errors.ServerOutOfTempSpaceError.error_code + sys.exit(error_code) except Exception as e: await write_bytes(str(e).encode(), file=sys.stderr) error_code = errors.UnexpectedConversionError.error_code diff --git a/dangerzone/conversion/errors.py b/dangerzone/conversion/errors.py index 2aeb38d..9ba2620 100644 --- a/dangerzone/conversion/errors.py +++ b/dangerzone/conversion/errors.py @@ -113,6 +113,17 @@ class InterruptedConversion(ConversionException): ) +class OutOfSpaceError(ConversionException): + error_code = ERROR_SHIFT + 70 + + +class ServerOutOfTempSpaceError(OutOfSpaceError): + """The server ran out of space""" + + error_code = ERROR_SHIFT + 71 + error_message = "The isolated environment where the document conversion take space ran out of space" + + class UnexpectedConversionError(PDFtoPPMException): error_code = ERROR_SHIFT + 100 error_message = "Some unexpected error occurred while converting the document"