--- a/libpurple/log.c Sun May 11 22:31:38 2014 +0200 +++ b/libpurple/log.c Tue May 13 00:26:43 2014 +0200 @@ -1707,7 +1707,7 @@ time_t log_last_modified; FILE *index; FILE *file; - int index_fd; + int file_fd, index_fd; char *index_tmp; char buf[BUF_LONG]; struct tm tm; @@ -1723,13 +1723,21 @@ g_free(logfile); - if (g_stat(purple_stringref_value(pathref), &st)) - { + file_fd = g_open(purple_stringref_value(pathref), 0, O_RDONLY); + if (file_fd == -1 || (file = fdopen(file_fd, "rb")) == NULL) { + purple_debug_error("log", + "Failed to open log file \"%s\" for reading: %s\n", + purple_stringref_value(pathref), g_strerror(errno)); purple_stringref_unref(pathref); g_free(pathstr); return NULL; } - else + if (fstat(file_fd, &st) == -1) { + purple_stringref_unref(pathref); + g_free(pathstr); + fclose(file); + return NULL; + } else log_last_modified = st.st_mtime; /* Change the .log extension to .idx */ @@ -1747,6 +1755,7 @@ if (st.st_mtime < log_last_modified) { purple_debug_warning("log", "Index \"%s\" exists, but is older than the log.\n", pathstr); + close(index_fd); } else { @@ -1782,19 +1791,12 @@ fclose(index); purple_stringref_unref(pathref); + fclose(file); return list; } } } - if (!(file = g_fopen(purple_stringref_value(pathref), "rb"))) { - purple_debug_error("log", "Failed to open log file \"%s\" for reading: %s\n", - purple_stringref_value(pathref), g_strerror(errno)); - purple_stringref_unref(pathref); - g_free(pathstr); - return NULL; - } - index_tmp = g_strdup_printf("%s.XXXXXX", pathstr); if ((index_fd = g_mkstemp(index_tmp)) == -1) { purple_debug_error("log", "Failed to open index temp file: %s\n",