[PATCH v2] erofs-utils: tar: handle empty filenames correctly

Gao Xiang hsiangkao at linux.alibaba.com
Fri Feb 28 15:54:26 AEDT 2025


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 at linux.alibaba.com>
---
changes since v1:
 - add print message for this case;
 - add a reproduciable blob in the commit message.

 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.43.5



More information about the Linux-erofs mailing list