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)
* 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
* 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)
* 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 */
log_level = logger_get_level_for_buffer (logger_buffer->buffer);
if (log_level == 0)
{
logger_buffer_free (logger_buffer);
return 0;
}
/* create directory */
if (!logger_create_directory ())
@ -566,16 +563,12 @@ logger_create_log_file (struct t_logger_buffer *logger_buffer)
"(\"%s\")"),
weechat_prefix ("error"), LOGGER_PLUGIN_NAME,
weechat_config_string (logger_config_file_path));
logger_buffer_free (logger_buffer);
return 0;
}
if (!logger_buffer->log_filename)
logger_set_log_filename (logger_buffer);
if (!logger_buffer->log_filename)
{
logger_buffer_free (logger_buffer);
return 0;
}
/* create or append to 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"),
weechat_prefix ("error"), LOGGER_PLUGIN_NAME,
logger_buffer->log_filename, strerror (errno));
logger_buffer_free (logger_buffer);
return 0;
}
@ -603,7 +595,6 @@ logger_create_log_file (struct t_logger_buffer *logger_buffer)
fclose (logger_buffer->log_file);
logger_buffer->log_file = NULL;
logger_buffer->log_file_inode = 0;
logger_buffer_free (logger_buffer);
return 0;
}
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))
return;
if (!logger_buffer->log_file)
return;
weechat_va_format (format);
if (vbuffer)
{
@ -710,10 +704,8 @@ logger_stop (struct t_logger_buffer *logger_buffer, int write_info_line)
_("%s\t**** End of log ****"),
buf_time);
}
fclose (logger_buffer->log_file);
logger_buffer->log_file = NULL;
logger_buffer->log_file_inode = 0;
}
logger_buffer_free (logger_buffer);
}