Skip to content

Conversation

danigm
Copy link

@danigm danigm commented Aug 28, 2025

This patch moves the _set_rock_ridge method call after the continuation is parsed and sets the max version detected between dr_entries and ce_entries.

This issue was detected parsing new openSUSE Tumbleweed iso. Looks like mkisofs starts using continuation area ('CE') blobs if file name length is > 92 and PX record could be there, affecting the version detection: https://bugzilla.suse.com/show_bug.cgi?id=1209983#c15

This patch moves the _set_rock_ridge method call after the continuation
is parsed and sets the max version detected between dr_entries and
ce_entries.

This issue was detected parsing new openSUSE Tumbleweed iso. Looks like
mkisofs starts using continuation area ('CE') blobs if file name length
is > 92 and PX record could be there, affecting the version detection:
https://bugzilla.suse.com/show_bug.cgi?id=1209983#c15
@danigm
Copy link
Author

danigm commented Aug 28, 2025

This is the code used to reproduce the error reported:

#!/usr/bin/python3.13

import sys
import pycdlib

iso = pycdlib.PyCdlib()
iso.open(sys.argv[1])

for child in iso.list_children(iso_path='/'):
    print(child.file_identifier())

iso.close()

When run with the latest Tumbleweed iso https://download.opensuse.org/tumbleweed/iso/openSUSE-Tumbleweed-DVD-x86_64-Current.iso.

Run with master version:

(env) [danigm@hex pycdlib]!master $ ./reproducer.py /home/danigm/Downloads/suse/openSUSE-Tumbleweed-DVD-x86_64-Snapshot20250826-Media.iso 
Traceback (most recent call last):
  File "/home/danigm/Projects/suse/tmp/pycdlib/./reproducer.py", line 7, in <module>
    iso.open(sys.argv[1])
    ~~~~~~~~^^^^^^^^^^^^^
  File "/home/danigm/Projects/suse/tmp/pycdlib/pycdlib/pycdlib.py", line 4066, in open
    self._open_fp(fp)
    ~~~~~~~~~~~~~^^^^
  File "/home/danigm/Projects/suse/tmp/pycdlib/pycdlib/pycdlib.py", line 2235, in _open_fp
    ic_level, lastbyte = self._walk_directories(self.pvd, extent_to_ptr,
                         ~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
                                                extent_to_inode, le_ptrs)
                                                ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/danigm/Projects/suse/tmp/pycdlib/pycdlib/pycdlib.py", line 1055, in _walk_directories
    self._set_rock_ridge(rr)
    ~~~~~~~~~~~~~~~~~~~~^^^^
  File "/home/danigm/Projects/suse/tmp/pycdlib/pycdlib/pycdlib.py", line 941, in _set_rock_ridge
    raise pycdlibexception.PyCdlibInvalidISO('Inconsistent Rock Ridge versions on the ISO!')
pycdlib.pycdlibexception.PyCdlibInvalidISO: Inconsistent Rock Ridge versions on the ISO!

Run with patched version:

(env) [danigm@hex pycdlib]!rock-ridge-version-detection $ ./reproducer.py /home/danigm/Downloads/suse/openSUSE-Tumbleweed-DVD-x86_64-Snapshot20250826-Media.iso 
b'.'
b'..'
b'BOOT'
b'CHECKSUM.;1'
b'CHECKSUM.ASC;1'
b'DOCU'
b'EFI'
b'GPG_P000.ASC;1'
b'GPG_P001.ASC;1'
b'GPG_P002.ASC;1'
b'GPG_PUBK.ASC;1'
b'GPLV2.TXT;1'
b'GPLV3.TXT;1'
b'MEDIA.1'
b'NOARCH'
b'README.;1'
b'REPODATA'
b'SUSEGO.ICO;1'
b'SUSEGO.PNG;1'
b'SUSEGO.SVG;1'
b'X86_64'
b'_TREEINF.;1'

@ZouYuhua
Copy link

I encountered this error as well and need this fix. When will it be merged? Thanks

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants