mirror of
https://github.com/MidnightCommander/mc
synced 2025-01-18 17:29:28 +03:00
Ticket #3456: SFTP VFS: fix segfault.
(mc_error_message): return error code for possible following use." (sftpfs_cb_open_connection): fix dereference of null pointer. Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
parent
549661e50b
commit
17bbeb9791
@ -435,12 +435,16 @@ message (int flags, const char *title, const char *text, ...)
|
|||||||
/** Show error message box */
|
/** Show error message box */
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
mc_error_message (GError ** mcerror)
|
mc_error_message (GError ** mcerror, int *code)
|
||||||
{
|
{
|
||||||
if (mcerror == NULL || *mcerror == NULL)
|
if (mcerror == NULL || *mcerror == NULL)
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
message (D_ERROR, MSG_ERROR, _("%d: %s"), (*mcerror)->code, (*mcerror)->message);
|
message (D_ERROR, MSG_ERROR, _("%d: %s"), (*mcerror)->code, (*mcerror)->message);
|
||||||
|
|
||||||
|
if (code != NULL)
|
||||||
|
*code = (*mcerror)->code;
|
||||||
|
|
||||||
g_error_free (*mcerror);
|
g_error_free (*mcerror);
|
||||||
*mcerror = NULL;
|
*mcerror = NULL;
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ struct WDialog *create_message (int flags, const char *title,
|
|||||||
void message (int flags, const char *title, const char *text, ...)
|
void message (int flags, const char *title, const char *text, ...)
|
||||||
__attribute__ ((format (__printf__, 3, 4)));
|
__attribute__ ((format (__printf__, 3, 4)));
|
||||||
|
|
||||||
gboolean mc_error_message (GError ** mcerror);
|
gboolean mc_error_message (GError ** mcerror, int *code);
|
||||||
|
|
||||||
status_msg_t *status_msg_create (const char *title, double delay, status_msg_cb init_cb,
|
status_msg_t *status_msg_create (const char *title, double delay, status_msg_cb init_cb,
|
||||||
status_msg_update_cb update_cb, status_msg_cb deinit_cb);
|
status_msg_update_cb update_cb, status_msg_cb deinit_cb);
|
||||||
|
@ -166,7 +166,7 @@ skin_apply (const gchar * skin_override)
|
|||||||
panel_init ();
|
panel_init ();
|
||||||
repaint_screen ();
|
repaint_screen ();
|
||||||
|
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* --------------------------------------------------------------------------------------------- */
|
/* --------------------------------------------------------------------------------------------- */
|
||||||
|
@ -965,7 +965,7 @@ regex_command_for (void *target, const vfs_path_t * filename_vpath, const char *
|
|||||||
p += 2;
|
p += 2;
|
||||||
|
|
||||||
found = regex_check_type (filename_vpath, p, case_insense, &have_type, &mcerror);
|
found = regex_check_type (filename_vpath, p, case_insense, &have_type, &mcerror);
|
||||||
if (mc_error_message (&mcerror))
|
if (mc_error_message (&mcerror, NULL))
|
||||||
error_flag = TRUE; /* leave it if file cannot be opened */
|
error_flag = TRUE; /* leave it if file cannot be opened */
|
||||||
}
|
}
|
||||||
else if (strncmp (p, "default/", 8) == 0)
|
else if (strncmp (p, "default/", 8) == 0)
|
||||||
|
@ -1472,7 +1472,7 @@ load_hotlist (void)
|
|||||||
if (!mc_config_save_file (mc_main_config, &mcerror))
|
if (!mc_config_save_file (mc_main_config, &mcerror))
|
||||||
setup_save_config_show_error (mc_main_config->ini_path, &mcerror);
|
setup_save_config_show_error (mc_main_config->ini_path, &mcerror);
|
||||||
|
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
stat (hotlist_file_name, &stat_buf);
|
stat (hotlist_file_name, &stat_buf);
|
||||||
|
@ -378,7 +378,7 @@ main (int argc, char *argv[])
|
|||||||
if (mc_global.mc_run_mode == MC_RUN_FULL)
|
if (mc_global.mc_run_mode == MC_RUN_FULL)
|
||||||
command_set_default_colors ();
|
command_set_default_colors ();
|
||||||
|
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
|
|
||||||
#ifdef ENABLE_SUBSHELL
|
#ifdef ENABLE_SUBSHELL
|
||||||
/* Done here to ensure that the subshell doesn't */
|
/* Done here to ensure that the subshell doesn't */
|
||||||
|
@ -155,7 +155,7 @@ sftpfs_cb_open (const vfs_path_t * vpath, int flags, mode_t mode)
|
|||||||
|
|
||||||
if (!sftpfs_open_file (file_handler, flags, mode, &mcerror))
|
if (!sftpfs_open_file (file_handler, flags, mode, &mcerror))
|
||||||
{
|
{
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
g_free (file_handler);
|
g_free (file_handler);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -184,7 +184,7 @@ sftpfs_cb_opendir (const vfs_path_t * vpath)
|
|||||||
tty_got_interrupt ();
|
tty_got_interrupt ();
|
||||||
|
|
||||||
ret_value = sftpfs_opendir (vpath, &mcerror);
|
ret_value = sftpfs_opendir (vpath, &mcerror);
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
return ret_value;
|
return ret_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -209,7 +209,7 @@ sftpfs_cb_readdir (void *data)
|
|||||||
}
|
}
|
||||||
|
|
||||||
sftpfs_dirent = sftpfs_readdir (data, &mcerror);
|
sftpfs_dirent = sftpfs_readdir (data, &mcerror);
|
||||||
if (!mc_error_message (&mcerror))
|
if (!mc_error_message (&mcerror, NULL))
|
||||||
{
|
{
|
||||||
if (sftpfs_dirent != NULL)
|
if (sftpfs_dirent != NULL)
|
||||||
vfs_print_message (_("sftp: (Ctrl-G break) Listing... %s"), sftpfs_dirent->dent.d_name);
|
vfs_print_message (_("sftp: (Ctrl-G break) Listing... %s"), sftpfs_dirent->dent.d_name);
|
||||||
@ -235,7 +235,7 @@ sftpfs_cb_closedir (void *data)
|
|||||||
GError *mcerror = NULL;
|
GError *mcerror = NULL;
|
||||||
|
|
||||||
rc = sftpfs_closedir (data, &mcerror);
|
rc = sftpfs_closedir (data, &mcerror);
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -255,7 +255,7 @@ sftpfs_cb_lstat (const vfs_path_t * vpath, struct stat *buf)
|
|||||||
GError *mcerror = NULL;
|
GError *mcerror = NULL;
|
||||||
|
|
||||||
rc = sftpfs_lstat (vpath, buf, &mcerror);
|
rc = sftpfs_lstat (vpath, buf, &mcerror);
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -275,7 +275,7 @@ sftpfs_cb_stat (const vfs_path_t * vpath, struct stat *buf)
|
|||||||
GError *mcerror = NULL;
|
GError *mcerror = NULL;
|
||||||
|
|
||||||
rc = sftpfs_stat (vpath, buf, &mcerror);
|
rc = sftpfs_stat (vpath, buf, &mcerror);
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -295,7 +295,7 @@ sftpfs_cb_fstat (void *data, struct stat *buf)
|
|||||||
GError *mcerror = NULL;
|
GError *mcerror = NULL;
|
||||||
|
|
||||||
rc = sftpfs_fstat (data, buf, &mcerror);
|
rc = sftpfs_fstat (data, buf, &mcerror);
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -316,7 +316,7 @@ sftpfs_cb_readlink (const vfs_path_t * vpath, char *buf, size_t size)
|
|||||||
GError *mcerror = NULL;
|
GError *mcerror = NULL;
|
||||||
|
|
||||||
rc = sftpfs_readlink (vpath, buf, size, &mcerror);
|
rc = sftpfs_readlink (vpath, buf, size, &mcerror);
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -354,7 +354,7 @@ sftpfs_cb_symlink (const vfs_path_t * vpath1, const vfs_path_t * vpath2)
|
|||||||
GError *mcerror = NULL;
|
GError *mcerror = NULL;
|
||||||
|
|
||||||
rc = sftpfs_symlink (vpath1, vpath2, &mcerror);
|
rc = sftpfs_symlink (vpath1, vpath2, &mcerror);
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -440,7 +440,7 @@ sftpfs_cb_read (void *data, char *buffer, size_t count)
|
|||||||
}
|
}
|
||||||
|
|
||||||
rc = sftpfs_read_file (fh, buffer, count, &mcerror);
|
rc = sftpfs_read_file (fh, buffer, count, &mcerror);
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -462,7 +462,7 @@ sftpfs_cb_write (void *data, const char *buf, size_t nbyte)
|
|||||||
vfs_file_handler_t *fh = (vfs_file_handler_t *) data;
|
vfs_file_handler_t *fh = (vfs_file_handler_t *) data;
|
||||||
|
|
||||||
rc = sftpfs_write_file (fh, buf, nbyte, &mcerror);
|
rc = sftpfs_write_file (fh, buf, nbyte, &mcerror);
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -489,7 +489,7 @@ sftpfs_cb_close (void *data)
|
|||||||
vfs_stamp_create (&sftpfs_class, super);
|
vfs_stamp_create (&sftpfs_class, super);
|
||||||
|
|
||||||
rc = sftpfs_close_file (file_handler, &mcerror);
|
rc = sftpfs_close_file (file_handler, &mcerror);
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
|
|
||||||
if (file_handler->handle != -1)
|
if (file_handler->handle != -1)
|
||||||
close (file_handler->handle);
|
close (file_handler->handle);
|
||||||
@ -516,7 +516,7 @@ sftpfs_cb_chmod (const vfs_path_t * vpath, mode_t mode)
|
|||||||
GError *mcerror = NULL;
|
GError *mcerror = NULL;
|
||||||
|
|
||||||
rc = sftpfs_chmod (vpath, mode, &mcerror);
|
rc = sftpfs_chmod (vpath, mode, &mcerror);
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -536,7 +536,7 @@ sftpfs_cb_mkdir (const vfs_path_t * vpath, mode_t mode)
|
|||||||
GError *mcerror = NULL;
|
GError *mcerror = NULL;
|
||||||
|
|
||||||
rc = sftpfs_mkdir (vpath, mode, &mcerror);
|
rc = sftpfs_mkdir (vpath, mode, &mcerror);
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -555,7 +555,7 @@ sftpfs_cb_rmdir (const vfs_path_t * vpath)
|
|||||||
GError *mcerror = NULL;
|
GError *mcerror = NULL;
|
||||||
|
|
||||||
rc = sftpfs_rmdir (vpath, &mcerror);
|
rc = sftpfs_rmdir (vpath, &mcerror);
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -577,7 +577,7 @@ sftpfs_cb_lseek (void *data, off_t offset, int whence)
|
|||||||
GError *mcerror = NULL;
|
GError *mcerror = NULL;
|
||||||
|
|
||||||
ret_offset = sftpfs_lseek (file_handler, offset, whence, &mcerror);
|
ret_offset = sftpfs_lseek (file_handler, offset, whence, &mcerror);
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
return ret_offset;
|
return ret_offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -596,7 +596,7 @@ sftpfs_cb_unlink (const vfs_path_t * vpath)
|
|||||||
GError *mcerror = NULL;
|
GError *mcerror = NULL;
|
||||||
|
|
||||||
rc = sftpfs_unlink (vpath, &mcerror);
|
rc = sftpfs_unlink (vpath, &mcerror);
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -616,7 +616,7 @@ sftpfs_cb_rename (const vfs_path_t * vpath1, const vfs_path_t * vpath2)
|
|||||||
GError *mcerror = NULL;
|
GError *mcerror = NULL;
|
||||||
|
|
||||||
rc = sftpfs_rename (vpath1, vpath2, &mcerror);
|
rc = sftpfs_rename (vpath1, vpath2, &mcerror);
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -109,9 +109,9 @@ sftpfs_cb_open_connection (struct vfs_s_super *super,
|
|||||||
super->path_element = vfs_path_element_clone (vpath_element);
|
super->path_element = vfs_path_element_clone (vpath_element);
|
||||||
|
|
||||||
sftpfs_fill_connection_data_from_config (super, &mcerror);
|
sftpfs_fill_connection_data_from_config (super, &mcerror);
|
||||||
if (mc_error_message (&mcerror))
|
if (mc_error_message (&mcerror, &ret_value))
|
||||||
{
|
{
|
||||||
vpath_element->class->verrno = mcerror->code;
|
vpath_element->class->verrno = ret_value;
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -121,7 +121,7 @@ sftpfs_cb_open_connection (struct vfs_s_super *super,
|
|||||||
vfs_s_default_stat (vpath_element->class, S_IFDIR | 0755));
|
vfs_s_default_stat (vpath_element->class, S_IFDIR | 0755));
|
||||||
|
|
||||||
ret_value = sftpfs_open_connection (super, &mcerror);
|
ret_value = sftpfs_open_connection (super, &mcerror);
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
return ret_value;
|
return ret_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -140,7 +140,7 @@ sftpfs_cb_close_connection (struct vfs_class *me, struct vfs_s_super *super)
|
|||||||
|
|
||||||
(void) me;
|
(void) me;
|
||||||
sftpfs_close_connection (super, "Normal Shutdown", &mcerror);
|
sftpfs_close_connection (super, "Normal Shutdown", &mcerror);
|
||||||
mc_error_message (&mcerror);
|
mc_error_message (&mcerror, NULL);
|
||||||
g_free (super->data);
|
g_free (super->data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user