Skip to content

ISO9660 reader cannot see deeply nested directories on Rock Ridge/Joliet images #651

Description

@LSantha

Summary

JNode's ISO9660 reader cannot see deeply nested directories on a Rock Ridge / Joliet ISO mastered with mkisofs -R -J. The directory and its files provably exist on the image (verified host-side with isoinfo), but on-guest the path reports "does not exist". Shallow directories on the same disc list fine.

Environment

  • JNode 0.2.9-dev (x86 32-bit, cd-x86-lite), VirtualBox 7.2.6
  • ISO mastered with mkisofs -o jnode-x86-lite.iso -R -J -b boot/grub/eltorito.s2 -no-emul-boot -boot-load-size 4 -boot-info-table <stage>
  • Observed 2026-09-17

Reproduction

  1. Stage a nested tree on the CD, e.g. ox/mauve/gnu/testlet/java/io/DataInputStream/ containing ReadReference.class, ReadStream.class (depth 7 incl. device root: sg0/ox/mauve/gnu/testlet/java/io/DataInputStream).
  2. Re-master, cold boot (important: a snapshot-resume after an ISO change serves stale FS caches — always poweroff+start, see note below).
  3. On guest:
    ls /devices/sg0/ox/mauve/gnu/testlet/java/io/DataInputStream
    # -> this file or directory does not exist
    ls /devices/sg0/ox/mauve
    # -> works, shows the [gnu] subdir and all loose files
    
  4. Host-side verification that the files are on the image:
    isoinfo -R -f -i jnode-x86-lite.iso | grep DataInputStream
    # -> /ox/mauve/gnu/testlet/java/io/DataInputStream/ReadStream.class etc.
    ls staging/ox/mauve/gnu/testlet/java/io/DataInputStream/   # files present
    

Small subdirectories (2 files) at the same depth also fail, so this is not a multi-extent (large directory) problem — it looks like a maximum-depth limit or unhandled Rock Ridge relocation (RE) entries in fs/src/fs/org/jnode/fs/iso9660/.

A related symptom observed once (possibly confounded by a stale snapshot FS cache, so reported here only as a note): ls on an affected directory threw java.lang.StringIndexOutOfBoundsException: String index out of range from org.jnode.fs.iso9660.Descriptor.getDChars(Descriptor.java:172) via EntryRecord.getFileIdentifier(EntryRecord.java:140) / EntryRecord.<init>(EntryRecord.java:64). If directory parsing can fail, it should degrade to an error for that entry, not abort the whole listing.

Expected behavior

  • Nested directories up to the ISO9660 limit (8 levels) list and read correctly, or
  • a clear limitation is documented (help mount / filesystem docs).

Impact / workaround

Test corpora with package-shaped trees (e.g. mauve gnu/testlet/...) cannot be served from the CD; we fell back to staging loose files flat in one directory plus one explicitly-listed sibling (ReadStream.class). That caps corpus growth and forces per-file staging maintenance.

Triage Addendum (auto, 2026-09-25)

  • Area / Kind: area/fs (Sub: ISO9660) / kind/bug
  • Blast radius: L2 package (org.jnode.fs.iso9660; suspected EntryRecord/directory parsing, no public API or plugin-boundary change expected)
  • Expected scope: pending trace; bound any fix to fs/src/fs/org/jnode/fs/iso9660/ and focused filesystem tests, with no ASM, public API, or boot-path changes
  • Test path: sh build.sh -f fs/build-tests.xml all-junit, then cold-boot a cd-x86-lite image and repeat the nested lookup
  • Merge signal: human-review (insufficient signal: incomplete bug repro and filesystem behavior change)
  • Gaps: blocking: reporter must provide the JNode commit SHA, complete VirtualBox/QEMU cold-boot command, and 20-60 line console excerpt around the failed lookup or exception
  • Full report: ## Triage comment below.

❌ Ticket Runner Status

Field Value
Phase FAILED
Turn 0/3
Retries 3/3
PR -
Started 2026-09-25T00:53:32.241Z

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent/failedThe agent exhausted its retries without producing a result.agent/needs-infoThe agent has posted clarifying questions; waiting for the reporter.area/fsfs/ — filesystem drivers (FAT, ext2, HFS+, NTFS, ISO9660, ExFAT).kind/bugConfirmed bug report with a repro or stack trace.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions