From ffa517605bf978cd76a4449143b1aad8b534d901 Mon Sep 17 00:00:00 2001 From: Gao Xiang Date: Fri, 28 Feb 2025 12:54:26 +0800 Subject: [PATCH] erofs-utils: tar: handle empty filenames correctly 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 Link: https://lore.kernel.org/r/20250228045426.81099-1-hsiangkao@linux.alibaba.com --- lib/tar.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/tar.c b/lib/tar.c index 2ea3858..941fad2 100644 --- a/lib/tar.c +++ b/lib/tar.c @@ -826,8 +826,14 @@ out_eot: 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; -- 2.34.1