--- a/libpurple/plugins/log_reader.c Sat May 10 03:56:36 2014 +0530 +++ b/libpurple/plugins/log_reader.c Thu May 15 10:16:32 2014 +0530 @@ -1409,12 +1409,16 @@ purple_debug_info("Trillian log read", "Reading %s\n", data->path); - read = g_malloc(data->length + 2); - file = g_fopen(data->path, "rb"); g_return_val_if_fail(file != NULL, g_strdup("")); - if (fseek(file, data->offset, SEEK_SET) != 0) + + read = g_malloc(data->length + 2); + + if (fseek(file, data->offset, SEEK_SET) != 0) { + fclose(file); + g_free(read); g_return_val_if_reached(g_strdup("")); + } data->length = fread(read, 1, data->length, file); fclose(file); @@ -1831,8 +1835,7 @@ } else { while (*c) c++; - if (c) - c--; + c--; c = g_strrstr(c, "("); } @@ -1935,8 +1938,11 @@ contents = g_malloc(data->length + 2); - if (fseek(file, data->offset, SEEK_SET) != 0) + if (fseek(file, data->offset, SEEK_SET) != 0) { + fclose(file); + g_free(contents); g_return_val_if_reached(g_strdup("")); + } data->length = fread(contents, 1, data->length, file); fclose(file); @@ -1979,6 +1985,8 @@ /* find EOL */ c = strchr(c, '\n'); + if (!c) + break; /* XXX: Do we need buddy_name when we have buddy->alias? */ buddy_name = ++c; @@ -2316,13 +2324,16 @@ g_return_val_if_fail(data->path != NULL, g_strdup("")); g_return_val_if_fail(data->length > 0, g_strdup("")); - contents = g_malloc(data->length + 2); - file = g_fopen(data->path, "rb"); g_return_val_if_fail(file != NULL, g_strdup("")); - if (fseek(file, data->offset, SEEK_SET) != 0) + contents = g_malloc(data->length + 2); + + if (fseek(file, data->offset, SEEK_SET) != 0) { + fclose(file); + free(contents); g_return_val_if_reached(g_strdup("")); + } data->length = fread(contents, 1, data->length, file); fclose(file);