can1357/oh-my-pi · error · ArchiveError
Unsupported High Sierra CD-ROM filesystem (not ISO 9660)
Error message
Unsupported High Sierra CD-ROM filesystem (not ISO 9660)
What it means
The ISO volume scan found no ISO 9660 primary (or Joliet) volume descriptor, but it did see a High Sierra (CD-ROM, the pre-ISO 9660 predecessor) descriptor. Since the reader only implements ISO 9660/Joliet, it raises this specific error to tell you the image is the older filesystem rather than a generic 'descriptor not found' failure.
Source
Thrown at packages/utils/src/ar/iso.ts:299
descriptor[88] === 0x25 &&
descriptor[89] === 0x2f &&
[0x40, 0x43, 0x45].includes(descriptor[90]!)
) {
joliet = parseVolumeDescriptor(descriptor, true);
}
if (type === 255) {
terminated = true;
break;
}
}
pendingOffset += ISO_SECTOR_SIZE;
scanned += ISO_SECTOR_SIZE;
}
position += pending.byteLength;
chunkSectors = Math.min(chunkSectors * 2, Math.ceil(limits.maxIndexSize / ISO_SECTOR_SIZE));
}
if (!primary && !joliet) {
if (sawHighSierra) throw new ArchiveError("Unsupported High Sierra CD-ROM filesystem (not ISO 9660)");
if (sawUdf) throw new ArchiveError("Unsupported UDF-only image (no ISO 9660 volume descriptor)");
throw invalidIso("primary volume descriptor not found");
}
if (!terminated) throw invalidIso("volume descriptor terminator not found");
if (joliet) return { ...joliet, rockRidgeRoot: primary?.root };
return primary!;
}
function decodeIdentifier(identifier: Uint8Array, joliet: boolean): string {
let name: string;
if (joliet) {
if (identifier.byteLength % 2 !== 0) throw invalidIso("Joliet identifier has an odd byte length");
const codeUnits = new Uint16Array(identifier.byteLength / 2);
for (let index = 0; index < codeUnits.length; index++) codeUnits[index] = readUInt16BE(identifier, index * 2);
const chunks: string[] = [];
for (let index = 0; index < codeUnits.length; index += 4096) {
chunks.push(String.fromCharCode(...codeUnits.subarray(index, index + 4096)));
}View on GitHub (pinned to 9690622007)
Solutions
- Re-master the content as ISO 9660 with xorriso/genisoimage from the original files
- Convert the High Sierra image with a conversion utility (e.g. isohybrid-era tools or hs2iso-style converters) that rewrites descriptors to ISO 9660
- Mount/inspect the image with a filesystem driver that understands High Sierra (e.g. mount -t hfs/hsfs where available) outside this library
- Check whether your dump contains multiple sessions and extract the ISO 9660 session instead
Example fix
// before: reading a High Sierra-only dump const vol = await readIso(image); // ArchiveError: Unsupported High Sierra... // after: re-master as ISO 9660 // $ xorriso -as mkisofs -o fixed.iso -r content-dir/ const vol = await readIso(fixedImage);
Defensive patterns
Strategy: fallback
Validate before calling
// check descriptor type bytes at sectors 16.. for 'CD001' vs High Sierra 'CDROM'
const sector16 = new Uint8Array(await Bun.file(path).slice(32768 + 1, 32768 + 6).arrayBuffer());
const isIso = new TextDecoder().decode(sector16) === 'CD001';
if (!isIso) console.warn('not ISO 9660; may be High Sierra'); Type guard
null
Try / catch
try {
vol = await readIso(image);
} catch (err) {
if (err instanceof ArchiveError && err.message.includes('High Sierra')) {
return readWithExternalTool(image); // e.g. xorriso -osirrox extraction
}
throw err;
} Prevention
- Detect 'CDROM' vs 'CD001' signature before choosing a reader
- Keep High Sierra images out of ISO-only pipelines
- Re-master legacy discs as ISO 9660 at dump time
When it happens
Trigger: Calling the ISO reader (readVolume, reached through the volume/entry APIs) on a disc image whose descriptor sequence contains only High Sierra volume descriptors (CD-ROM signature at the descriptor type) and no primary ISO 9660 or Joliet descriptor before the terminator/limit.
Common situations: Archived CD-ROM images from the mid-1980s (pre-1988), images converted from old mastering software, or hybrid discs where the ISO session is missing and only the High Sierra session was dumped.
Related errors
- Unsupported ISO 9660 logical block size ${blockSize} (expect
- Unsupported UDF-only image (no ISO 9660 volume descriptor)
- Unsupported format: ${streamInfo.extension || streamInfo.mim
- Unsupported archive format: ${assetName}
- Unsupported Rock Ridge relocated directory (${susp.relocatio
AI-assisted analysis of can1357/oh-my-pi@9690622007 (2026-08-31).
Data as JSON: /api/errors/cb443c458d5a7d2e.
Report an issue: GitHub.