Description
Sometimes it is impossible to save redactions, which leads to potential data loss (at least the already performed redactions are lost)
Example files
- samples_openpreserve/jhove-errors/PDF-HUL-35/143424271191706722106594310729442158189.pdf
- samples_openpreserve/jhove-errors/PDF-HUL-35/A Defence of the New Tenseless Theory of Time.pdf
- samples_openpreserve/pdf-handbuilt-test-corpus/T02-02_004_page-tree-non-existing-object-as-kid.pdf
- samples_openpreserve/pdf-handbuilt-test-corpus/T02-03_006_page-object-missing.pdf
Logs
Traceback (most recent call last):
File "/usr/share/censor/censor/pymupdf_helpers.py", line 23, in clean_page
mupdf_page.clean_contents(sanitize=False)
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/pymupdf/__init__.py", line 10870, in clean_contents
mupdf.pdf_filter_page_contents( page.doc(), page, filter_)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/mupdf/__init__.py", line 56523, in pdf_filter_page_contents
return _mupdf.pdf_filter_page_contents(doc, page, options)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
mupdf.FzErrorArgument: code=4: not a dict (null)
and
WARNING: Saving Document Failed: code=4: not a dict (null)
Traceback (most recent call last):
File "/usr/share/censor/censor/window.py", line 295, in on_save_response
self.save_file(file)
~~~~~~~~~~~~~~^^^^^^
File "/usr/share/censor/censor/window.py", line 302, in save_file
self.document.save(file.get_path())
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/usr/share/censor/censor/document.py", line 156, in save
mupdf_page.add_redact_annot(redaction_rotated, fill=False)
~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/pymupdf/__init__.py", line 10549, in add_redact_annot
annot = self._add_redact_annot(quad, text=text, da_str=da_str,
align=align, fill=fill)
File "/usr/lib/python3.14/site-packages/pymupdf/__init__.py", line 9726, in _add_redact_annot
annot = mupdf.pdf_create_annot(page, mupdf.PDF_ANNOT_REDACT)
File "/usr/lib/python3.14/site-packages/mupdf/__init__.py", line 55925, in pdf_create_annot
return _mupdf.pdf_create_annot(page, type)
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
mupdf.FzErrorArgument: code=4: not a dict (null)
Implementation
- Determine already when opening if a file cannot be saved (actually it is already saved once, but seems to be not enough, yet). Just run dummy
mupdf_page.add_redact_annotand/ormupdf_page.clean_contentsand stop opening the file - Alternatively, fix the issue (or let upstream fix it)
Upstream issue
- not reported, yet
## Description
Sometimes it is impossible to save redactions, which leads to potential data loss (at least the already performed redactions are lost)
## Example files
- samples_openpreserve/jhove-errors/PDF-HUL-35/143424271191706722106594310729442158189.pdf
- samples_openpreserve/jhove-errors/PDF-HUL-35/A Defence of the New Tenseless Theory of Time.pdf
- samples_openpreserve/pdf-handbuilt-test-corpus/T02-02_004_page-tree-non-existing-object-as-kid.pdf
- samples_openpreserve/pdf-handbuilt-test-corpus/T02-03_006_page-object-missing.pdf
## Logs
```py
Traceback (most recent call last):
File "/usr/share/censor/censor/pymupdf_helpers.py", line 23, in clean_page
mupdf_page.clean_contents(sanitize=False)
~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/pymupdf/__init__.py", line 10870, in clean_contents
mupdf.pdf_filter_page_contents( page.doc(), page, filter_)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/mupdf/__init__.py", line 56523, in pdf_filter_page_contents
return _mupdf.pdf_filter_page_contents(doc, page, options)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^
mupdf.FzErrorArgument: code=4: not a dict (null)
```
and
```py
WARNING: Saving Document Failed: code=4: not a dict (null)
Traceback (most recent call last):
File "/usr/share/censor/censor/window.py", line 295, in on_save_response
self.save_file(file)
~~~~~~~~~~~~~~^^^^^^
File "/usr/share/censor/censor/window.py", line 302, in save_file
self.document.save(file.get_path())
~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
File "/usr/share/censor/censor/document.py", line 156, in save
mupdf_page.add_redact_annot(redaction_rotated, fill=False)
~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.14/site-packages/pymupdf/__init__.py", line 10549, in add_redact_annot
annot = self._add_redact_annot(quad, text=text, da_str=da_str,
align=align, fill=fill)
File "/usr/lib/python3.14/site-packages/pymupdf/__init__.py", line 9726, in _add_redact_annot
annot = mupdf.pdf_create_annot(page, mupdf.PDF_ANNOT_REDACT)
File "/usr/lib/python3.14/site-packages/mupdf/__init__.py", line 55925, in pdf_create_annot
return _mupdf.pdf_create_annot(page, type)
~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^
mupdf.FzErrorArgument: code=4: not a dict (null)
```
## Implementation
1. Determine already when opening if a file cannot be saved (actually it is already saved once, but seems to be not enough, yet). Just run dummy `mupdf_page.add_redact_annot` and/or `mupdf_page.clean_contents` and stop opening the file
2. Alternatively, fix the issue (or let upstream fix it)
## Upstream issue
- not reported, yet