From 209d784d0e0c8fc40f9e18549e988ce19e254117 Mon Sep 17 00:00:00 2001 From: Chiaki ISHIKAWA Date: Tue, 10 Mar 2015 21:50:15 +0900 Subject: [PATCH 4/8] make sure the result of stat() call is checked. --- ccache.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/ccache.c b/ccache.c index 44383d1..65e376a 100644 --- a/ccache.c +++ b/ccache.c @@ -759,8 +759,15 @@ void update_manifest_file(void) if (manifest_put(manifest_path, cached_obj_hash, included_files)) { cc_log("Added object file hash to %s", manifest_path); update_mtime(manifest_path); - stat(manifest_path, &st); - stats_update_size(file_size(&st) - old_size, old_size == 0 ? 1 : 0); + /* + * Don't forget to check the return value of stat and act accordingly. + */ + if (stat(manifest_path, &st) == 0) { + stats_update_size(file_size(&st) - old_size, old_size == 0 ? 1 : 0); + } else { + cc_log("stat on manifest (manifest_path) %s failed (%s), so size statistics is incorrect.", + manifest_path, strerror(errno)); + } } else { cc_log("Failed to add object file hash to %s", manifest_path); } @@ -908,9 +915,22 @@ to_cache(struct args *args) } cc_log("Stored in cache: %s", cached_stderr); if (conf->compression) { - stat(cached_stderr, &st); + /* + * The file was compressed, so obtain the compressed + * size again. + * + * Do not forget to check return value of stat() and act + * accordingly. + */ + if ( stat(cached_stderr, &st) == 0) { + stats_update_size(file_size(&st), 1); + } else { + cc_log("stat on cached_stderr=%s failed (%s)", + cached_stderr, strerror(errno)); + } + } else { + stats_update_size(file_size(&st), 1); } - stats_update_size(file_size(&st), 1); } else { tmp_unlink(tmp_stderr); if (conf->recache) { -- 2.1.4