File without read rights will abort diffoscope
When running with a file that had only root access permissions, running diffoscope as a regular user fails.
This was seen in a live image for the file /etc/.pwd.lock
Minimal case to reproduce the issue:
As root:
touch a b
chmod go= a b
As a regular user
diffoscope a b
The result
Traceback (most recent call last):
File "/usr/bin/diffoscope", line 36, in <module>
main()
File "/usr/lib/python3/dist-packages/diffoscope/main.py", line 767, in main
sys.exit(run_diffoscope(parsed_args))
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/diffoscope/main.py", line 718, in run_diffoscope
difference = compare_root_paths(path1, path2)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/diffoscope/comparators/utils/compare.py", line 66, in compare_root_paths
file1 = specialize(FilesystemFile(path1, container=container1))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/diffoscope/comparators/utils/specialize.py", line 75, in specialize
if try_recognize(file, cls, cls.recognizes):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/diffoscope/comparators/utils/specialize.py", line 35, in try_recognize
if not recognizes(file):
^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/diffoscope/comparators/debian.py", line 253, in recognizes
if not super().recognizes(file):
^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/diffoscope/comparators/utils/file.py", line 176, in recognizes
file.magic_file_type,
^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/diffoscope/comparators/utils/file.py", line 325, in magic_file_type
self._magic_file_type = File.guess_file_type(self.path)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/diffoscope/comparators/utils/file.py", line 108, in guess_file_type
return maybe_decode(cls._mimedb.from_file(path))
^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3/dist-packages/magic/__init__.py", line 112, in from_file
with _real_open(filename):
^^^^^^^^^^^^^^^^^^^^
PermissionError: [Errno 13] Permission denied: 'a'