From e4c80b5d1352249f1ca4da2623a7772828c1b44d Mon Sep 17 00:00:00 2001 From: Andrew Borodin Date: Wed, 10 Jul 2024 21:04:27 +0300 Subject: [PATCH] Ticket #4560: extfs: fix segfault om enter to deleted archive. * (extfs_open_and_read_archive): fix NULL dereference if extfs_open_archive() doesn't create an error. * (extfs_open_archive): create an error message when mc_open() returns -1. Signed-off-by: Andrew Borodin --- src/vfs/extfs/extfs.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/vfs/extfs/extfs.c b/src/vfs/extfs/extfs.c index 59a0c39d3..2e8522795 100644 --- a/src/vfs/extfs/extfs.c +++ b/src/vfs/extfs/extfs.c @@ -531,7 +531,10 @@ extfs_open_archive (int fstype, const char *name, struct extfs_super_t **pparc, if (info->need_archive) { if (mc_stat (name_vpath, &mystat) == -1) + { + mc_propagate_error (error, 0, "%s", unix_error_string (errno)); goto ret; + } if (!vfs_file_is_local (name_vpath)) { @@ -737,9 +740,14 @@ extfs_open_and_read_archive (int fstype, const char *name, struct extfs_super_t const extfs_plugin_info_t *info; info = &g_array_index (extfs_plugins, extfs_plugin_info_t, fstype); - message (D_ERROR, MSG_ERROR, _("Cannot open %s archive\n%s:\n%s"), info->prefix, name, - error->message); - g_error_free (error); + if (error == NULL) + message (D_ERROR, MSG_ERROR, _("Cannot open %s archive\n%s"), info->prefix, name); + else + { + message (D_ERROR, MSG_ERROR, _("Cannot open %s archive\n%s:\n%s"), info->prefix, name, + error->message); + g_error_free (error); + } } else { -- 2.11.4.GIT