From ccf4132ea009b284a3a9698b1c681a473ed9571d Mon Sep 17 00:00:00 2001 From: Alex Pyrgiotis Date: Wed, 27 Sep 2023 16:39:50 +0300 Subject: [PATCH] conversion: Add sanity check for page count Add a sanity check at the end of the conversion from doc to pixels, to ensure that the resulting document will have the same number of pages as the original one. Refs #560 --- dangerzone/conversion/doc_to_pixels.py | 16 +++++++++++----- dangerzone/conversion/errors.py | 7 +++++++ 2 files changed, 18 insertions(+), 5 deletions(-) diff --git a/dangerzone/conversion/doc_to_pixels.py b/dangerzone/conversion/doc_to_pixels.py index 236564d..38f1615 100644 --- a/dangerzone/conversion/doc_to_pixels.py +++ b/dangerzone/conversion/doc_to_pixels.py @@ -349,16 +349,22 @@ class DocumentToPixels(DangerzoneConverter): timeout=timeout, ) - self.update_progress("Converted document to pixels") - - # Move converted files into /tmp/dangerzone - for filename in ( + final_files = ( glob.glob("/tmp/page-*.rgb") + glob.glob("/tmp/page-*.width") + glob.glob("/tmp/page-*.height") - ): + ) + + # XXX: Sanity check to avoid situations like #560. + if not running_on_qubes() and len(final_files) != 3 * num_pages: + raise errors.PageCountMismatch() + + # Move converted files into /tmp/dangerzone + for filename in final_files: shutil.move(filename, "/tmp/dangerzone") + self.update_progress("Converted document to pixels") + async def install_libreoffice_ext(self, libreoffice_ext: str) -> None: self.update_progress(f"Installing LibreOffice extension '{libreoffice_ext}'") unzip_args = [ diff --git a/dangerzone/conversion/errors.py b/dangerzone/conversion/errors.py index 971f2da..8c3ed9d 100644 --- a/dangerzone/conversion/errors.py +++ b/dangerzone/conversion/errors.py @@ -82,6 +82,13 @@ class MaxPageHeightException(PagesException): error_message = f"A page exceeded the maximum height." +class PageCountMismatch(PagesException): + error_code = ERROR_SHIFT + 46 + error_message = ( + "The final document does not have the same page count as the original one" + ) + + class PDFtoPPMException(ConversionException): error_code = ERROR_SHIFT + 50 error_message = "Error converting PDF to Pixels (pdftoppm)"