Skip to content

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'
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information