diff options
author | Dimitri van Heesch <doxygen@gmail.com> | 2021-05-24 10:01:38 (GMT) |
---|---|---|
committer | Dimitri van Heesch <doxygen@gmail.com> | 2021-05-24 10:09:04 (GMT) |
commit | 09b4200ed5bb66b58f4c77f439336398253f57ea (patch) | |
tree | 101893bf5eb64f279d5a67efe406e883e95ebe70 /src | |
parent | e965e5da00bce6076d7009e4a48acee76fc84a7c (diff) | |
download | Doxygen-09b4200ed5bb66b58f4c77f439336398253f57ea.zip Doxygen-09b4200ed5bb66b58f4c77f439336398253f57ea.tar.gz Doxygen-09b4200ed5bb66b58f4c77f439336398253f57ea.tar.bz2 |
Fixed endless loop issue following recursive symlink
- Also updated GHC's filesystem.hpp to version v1.5.6
Diffstat (limited to 'src')
-rw-r--r-- | src/doxygen.cpp | 20 |
1 files changed, 15 insertions, 5 deletions
diff --git a/src/doxygen.cpp b/src/doxygen.cpp index 9e2f737..5f8adc2 100644 --- a/src/doxygen.cpp +++ b/src/doxygen.cpp @@ -9848,7 +9848,6 @@ static std::string resolveSymlink(const std::string &path) return Dir::cleanDirPath(result.str()); } -static std::mutex g_pathsVisitedMutex; static StringUnorderedSet g_pathsVisited(1009); //---------------------------------------------------------------------------- @@ -9875,15 +9874,24 @@ static void readDir(FileInfo *fi, { paths->insert(dirName); } + //printf("%s isSymLink()=%d\n",qPrint(dirName),fi->isSymLink()); if (fi->isSymLink()) { dirName = resolveSymlink(dirName); - if (dirName.empty()) return; // recursive symlink + if (dirName.empty()) + { + //printf("RECURSIVE SYMLINK: %s\n",qPrint(dirName)); + return; // recursive symlink + } + } - std::lock_guard<std::mutex> lock(g_pathsVisitedMutex); - if (g_pathsVisited.find(dirName)!=g_pathsVisited.end()) return; // already visited path - g_pathsVisited.insert(dirName); + if (g_pathsVisited.find(dirName)!=g_pathsVisited.end()) + { + //printf("PATH ALREADY VISITED: %s\n",qPrint(dirName)); + return; // already visited path } + g_pathsVisited.insert(dirName); + Dir dir(dirName); msg("Searching for files in directory %s\n", qPrint(fi->absFilePath())); //printf("killSet=%p count=%d\n",killSet,killSet ? (int)killSet->count() : -1); @@ -9967,6 +9975,8 @@ void readFileOrDirectory(const QCString &s, // strip trailing slashes if (s.isEmpty()) return; + g_pathsVisited.clear(); + FileInfo fi(s.str()); //printf("readFileOrDirectory(%s)\n",s); { |