diff options
author | Joel Rosdahl <joel@rosdahl.net> | 2020-10-28 21:26:42 +0100 |
---|---|---|
committer | Joel Rosdahl <joel@rosdahl.net> | 2020-10-28 22:15:53 +0100 |
commit | 3c201cf44ee0e0115e8197635965fb9cbc0c485d (patch) | |
tree | 2bd39f47aa123e0bcc3ad64ad8bf7c59f40a39fc /test/suites/base.bash | |
parent | 6f40db00c55cb5dab078d85cb2c5f13af13bbef1 (diff) | |
download | ccache-3c201cf44ee0e0115e8197635965fb9cbc0c485d.tar.gz |
Restore original umask after finalize_at_exit
If umask (CCACHE_UMASK) has been configured, ccache restores the
original umask before executing external programs so that the configured
umask is only used for files created by ccache itself. After a
refactoring of how flushing of statistics is done
(dd8f65aa5589709ca55bbb782050424a0010e8b8), the original umask is
restored before calling finalize_at_exit. If ccache hasn’t created a
result file (i.e., the result is not a cache miss, for example when
called for linking), finalize_stats_and_trigger_cleanup (called by
finalize_at_exit) chooses a random stats file and implicitly also
creates any missing cache directories. Such cache directories will
therefore be created without applying the configured umask.
Fix this by restoring the original mask after calling finalize_at_exit.
Fixes #710.
Diffstat (limited to 'test/suites/base.bash')
-rw-r--r-- | test/suites/base.bash | 24 |
1 files changed, 21 insertions, 3 deletions
diff --git a/test/suites/base.bash b/test/suites/base.bash index 8f2ef970..34ab75d2 100644 --- a/test/suites/base.bash +++ b/test/suites/base.bash @@ -952,22 +952,26 @@ EOF saved_umask=$(umask) umask 022 export CCACHE_UMASK=002 + export CCACHE_TEMPDIR=$CCACHE_DIR/tmp cat <<EOF >test.c int main() {} EOF + # A cache-miss case which affects the stats file on level 1: + $CCACHE -M 5 >/dev/null $CCACHE_COMPILE -MMD -c test.c expect_stat 'cache hit (preprocessed)' 0 expect_stat 'cache miss' 1 - result_file=$(find $CCACHE_DIR -name '*R') - level_2_dir=$(dirname $result_file) - level_1_dir=$(dirname $(dirname $result_file)) + result_file=$(find "$CCACHE_DIR" -name '*R') + level_2_dir=$(dirname "$result_file") + level_1_dir=$(dirname $(dirname "$result_file")) expect_perm test.o -rw-r--r-- expect_perm test.d -rw-r--r-- expect_perm "$CCACHE_CONFIGPATH" -rw-rw-r-- expect_perm "$CCACHE_DIR" drwxrwxr-x + expect_perm "$CCACHE_DIR/tmp" drwxrwxr-x expect_perm "$level_1_dir" drwxrwxr-x expect_perm "$level_1_dir/stats" -rw-rw-r-- expect_perm "$level_2_dir" drwxrwxr-x @@ -986,6 +990,20 @@ EOF expect_stat 'called for link' 1 expect_perm test -rwxr-xr-x + # A non-cache-miss case which affects the stats file on level 2: + + rm -rf "$CCACHE_DIR" + + $CCACHE_COMPILE --version >/dev/null + expect_stat 'no input file' 1 + stats_file=$(find "$CCACHE_DIR" -name stats) + level_2_dir=$(dirname "$stats_file") + level_1_dir=$(dirname $(dirname "$stats_file")) + expect_perm "$CCACHE_DIR" drwxrwxr-x + expect_perm "$level_1_dir" drwxrwxr-x + expect_perm "$level_2_dir" drwxrwxr-x + expect_perm "$stats_file" -rw-rw-r-- + umask $saved_umask # ------------------------------------------------------------------------- |