From 6e7991e5e0e043c412638c140cc9bb5610db4668 Mon Sep 17 00:00:00 2001 From: "Steinar H. Gunderson" Date: Thu, 4 Jan 2024 23:10:15 +0100 Subject: [PATCH] In updatedb, check prunepaths _before_ opening the directory. This makes sure we never even try to enter a directory if it is in prunepaths (much like we already do with prunenames). Inspired by https://bugs.debian.org/1025099, although it doesn't fix that issue (we still open it before checking prunefs). --- updatedb.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/updatedb.cpp b/updatedb.cpp index 812304b..3a39159 100644 --- a/updatedb.cpp +++ b/updatedb.cpp @@ -533,14 +533,6 @@ string ExistingDB::read_next_dictionary() const // Takes ownership of fd. int scan(const string &path, int fd, dev_t parent_dev, dir_time modified, dir_time db_modified, ExistingDB *existing_db, DatabaseReceiver *corpus, DictionaryBuilder *dict_builder) { - if (string_list_contains_dir_path(&conf_prunepaths, &conf_prunepaths_index, path)) { - if (conf_debug_pruning) { - /* This is debugging output, don't mark anything for translation */ - fprintf(stderr, "Skipping `%s': in prunepaths\n", path.c_str()); - } - close(fd); - return 0; - } if (conf_prune_bind_mounts && is_bind_mount(path.c_str())) { if (conf_debug_pruning) { /* This is debugging output, don't mark anything for translation */ @@ -697,6 +689,13 @@ int scan(const string &path, int fd, dev_t parent_dev, dir_time modified, dir_ti } continue; } + if (string_list_contains_dir_path(&conf_prunepaths, &conf_prunepaths_index, (path_plus_slash + e.name).c_str())) { + if (conf_debug_pruning) { + /* This is debugging output, don't mark anything for translation */ + fprintf(stderr, "Skipping `%s/%s': in prunepaths\n", path.c_str(), e.name.c_str()); + } + continue; + } e.fd = opendir_noatime(fd, e.name.c_str()); if (e.fd == -1) { -- 2.39.2