From ffdb057e5bb56ffbe50230ed892dda84f0893e61 Mon Sep 17 00:00:00 2001 From: Andrew Borodin Date: Fri, 12 Jul 2024 20:26:41 +0300 Subject: [PATCH] Ticket #4561: tar: fix segault on copy fiiles from archive. * (tar_read_header): canonicalize path name after decoding of all headers occupied with long file/directory name. Signed-off-by: Andrew Borodin --- src/vfs/tar/tar.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/vfs/tar/tar.c b/src/vfs/tar/tar.c index ab00c5c12..d07597f4c 100644 --- a/src/vfs/tar/tar.c +++ b/src/vfs/tar/tar.c @@ -773,7 +773,6 @@ tar_read_header (struct vfs_class *me, struct vfs_s_super *archive) } tar_assign_string_dup (¤t_stat_info.orig_file_name, file_name); - canonicalize_pathname (file_name); tar_assign_string (¤t_stat_info.file_name, file_name); g_free (recent_long_link); @@ -817,6 +816,9 @@ tar_read_header (struct vfs_class *me, struct vfs_s_super *archive) current_stat_info.is_dumpdir = TRUE; } + /* Do this after decoding of all headers occupied with long file/directory name. */ + canonicalize_pathname (current_stat_info.file_name); + status = tar_insert_entry (me, archive, header, &inode); if (status != HEADER_SUCCESS) {