summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDimitri van Heesch <doxygen@gmail.com>2021-05-24 10:01:38 (GMT)
committerDimitri van Heesch <doxygen@gmail.com>2021-05-24 10:09:04 (GMT)
commit09b4200ed5bb66b58f4c77f439336398253f57ea (patch)
tree101893bf5eb64f279d5a67efe406e883e95ebe70 /src
parente965e5da00bce6076d7009e4a48acee76fc84a7c (diff)
downloadDoxygen-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.cpp20
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);
{