logger: fix crash when disabling logging on a buffer (closes #1444)

Crash happens if the log file was deleted before disabling logging and if the
option logger.file.info_lines is on.
v2.8-utf8proc
Sébastien Helleu 2020-01-25 13:42:12 +01:00
parent 4d67af399d
commit f980820395
2 changed files with 5 additions and 12 deletions

View File

@ -32,6 +32,7 @@ Bug fixes::
* core: fix evaluation of condition with nested "if" (issue #1434) * core: fix evaluation of condition with nested "if" (issue #1434)
* irc: case-insensitive comparison on incoming CTCP command, force upper case on CTCP replies (issue #1439) * irc: case-insensitive comparison on incoming CTCP command, force upper case on CTCP replies (issue #1439)
* irc: fix memory leak when the channel topic is changed * irc: fix memory leak when the channel topic is changed
* logger: fix crash when logging is disabled on a buffer and the log file was deleted in the meanwhile, when option logger.file.info_lines is on (issue #1444)
* relay: update buffers synchronization when buffers are renamed (issue #1428) * relay: update buffers synchronization when buffers are renamed (issue #1428)
* xfer: send signal "xfer_ended" after the received file has been renamed (issue #1438) * xfer: send signal "xfer_ended" after the received file has been renamed (issue #1438)

View File

@ -552,10 +552,7 @@ logger_create_log_file (struct t_logger_buffer *logger_buffer)
/* get log level */ /* get log level */
log_level = logger_get_level_for_buffer (logger_buffer->buffer); log_level = logger_get_level_for_buffer (logger_buffer->buffer);
if (log_level == 0) if (log_level == 0)
{
logger_buffer_free (logger_buffer);
return 0; return 0;
}
/* create directory */ /* create directory */
if (!logger_create_directory ()) if (!logger_create_directory ())
@ -566,16 +563,12 @@ logger_create_log_file (struct t_logger_buffer *logger_buffer)
"(\"%s\")"), "(\"%s\")"),
weechat_prefix ("error"), LOGGER_PLUGIN_NAME, weechat_prefix ("error"), LOGGER_PLUGIN_NAME,
weechat_config_string (logger_config_file_path)); weechat_config_string (logger_config_file_path));
logger_buffer_free (logger_buffer);
return 0; return 0;
} }
if (!logger_buffer->log_filename) if (!logger_buffer->log_filename)
logger_set_log_filename (logger_buffer); logger_set_log_filename (logger_buffer);
if (!logger_buffer->log_filename) if (!logger_buffer->log_filename)
{
logger_buffer_free (logger_buffer);
return 0; return 0;
}
/* create or append to log file */ /* create or append to log file */
logger_buffer->log_file = logger_buffer->log_file =
@ -587,7 +580,6 @@ logger_create_log_file (struct t_logger_buffer *logger_buffer)
_("%s%s: unable to write log file \"%s\": %s"), _("%s%s: unable to write log file \"%s\": %s"),
weechat_prefix ("error"), LOGGER_PLUGIN_NAME, weechat_prefix ("error"), LOGGER_PLUGIN_NAME,
logger_buffer->log_filename, strerror (errno)); logger_buffer->log_filename, strerror (errno));
logger_buffer_free (logger_buffer);
return 0; return 0;
} }
@ -603,7 +595,6 @@ logger_create_log_file (struct t_logger_buffer *logger_buffer)
fclose (logger_buffer->log_file); fclose (logger_buffer->log_file);
logger_buffer->log_file = NULL; logger_buffer->log_file = NULL;
logger_buffer->log_file_inode = 0; logger_buffer->log_file_inode = 0;
logger_buffer_free (logger_buffer);
return 0; return 0;
} }
logger_buffer->log_file_inode = statbuf.st_ino; logger_buffer->log_file_inode = statbuf.st_ino;
@ -654,6 +645,9 @@ logger_write_line (struct t_logger_buffer *logger_buffer,
if (!logger_create_log_file (logger_buffer)) if (!logger_create_log_file (logger_buffer))
return; return;
if (!logger_buffer->log_file)
return;
weechat_va_format (format); weechat_va_format (format);
if (vbuffer) if (vbuffer)
{ {
@ -710,10 +704,8 @@ logger_stop (struct t_logger_buffer *logger_buffer, int write_info_line)
_("%s\t**** End of log ****"), _("%s\t**** End of log ****"),
buf_time); buf_time);
} }
fclose (logger_buffer->log_file);
logger_buffer->log_file = NULL;
logger_buffer->log_file_inode = 0;
} }
logger_buffer_free (logger_buffer); logger_buffer_free (logger_buffer);
} }