Tar entries with empty filenames are unusual but shouldn't
cause a crash. Handle this by following `tar` behavior:
substitute `.` for the empty filenames.
Reproducible image (base64-encoded gzipped blob):
H4sICL2XwGcAA3Rlc3RfcmVhZF9mb3JtYXRfdGFyX2VtcHR5X2ZpbGVuYW1lLnRhcgBjY
KA9MDAwMDc3VQDShuamBiAaBGA0hGNoaGBgZGJsaAZUaADiGDIomNLBbQylxSWJRUCnlG
Tm4lVXnpGamoNHHtVTClR14ygYBaNgFNAAAAAE6urMAAYAAA==
Fixes: 95d315fd7958 ("erofs-utils: introduce tarerofs")
Signed-off-by: Gao Xiang <hsiangkao@linux.alibaba.com>
Link: https://lore.kernel.org/r/20250228045426.81099-1-hsiangkao@linux.alibaba.com
memcpy(path + j, th->name, sizeof(th->name));
path[j + sizeof(th->name)] = '\0';
j = strlen(path);
- while (path[j - 1] == '/')
- path[--j] = '\0';
+ if (__erofs_unlikely(!j)) {
+ erofs_info("substituting '.' for empty filename");
+ path[0] = '.';
+ path[1] = '\0';
+ } else {
+ while (path[j - 1] == '/')
+ path[--j] = '\0';
+ }
}
dataoff = tar->offset;