HomeFreeBSD

makefs: Fix cd9660 duplicate directory names

Description

makefs: Fix cd9660 duplicate directory names

Previously we could create cd9660 images with duplicate short (level 2)
names.

cd9660_level2_convert_filename used a 30-character limit (for files and
directories), not including the '.' separator. cd9660_rename_filename
used a 31-character limit, including the '.'. Directory names 31
characters or longer (without '.') were shortened to 30 characters, and
if a collision occurred cd9660_rename_filename uniquified them starting
with the 31st character. Unfortunately the directory record's name_len
was already set, so the unique part of the name was stripped off.

Directories are up to 31 d-characters (i.e., A-Z 0-9 and _); there is no
provision for a '.' in a directory name. Increase the name length limit
to 31 for directories, and exclude '.'s.

This name mapping and deduplication code is still fragile and convoluted
and would beenfit from a more holistic effort.

PR: 283238, 283112
Reviewed by: imp
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D48251

(cherry picked from commit 1f31d437428014e864bcce1223cf7017180e2608)

Details

Provenance
emasteAuthored on Mon, Dec 30, 3:01 PM
Reviewer
imp
Differential Revision
D48251: makefs: Fix cd9660 duplicate directory names
Parents
rG302be497fc03: makefs: Remove impossible if condition
Branches
Unknown
Tags
Unknown