mirror of
https://github.com/Kitware/CMake.git
synced 2026-01-11 08:20:18 -06:00
find_package: Enforce maximum nesting depth below maximum recursion depth
The stack usage for nested `find_package` calls is much larger than for other kinds of recursion, so enforce a lower limit to avoid stack overflow.
This commit is contained in:
@@ -976,6 +976,21 @@ bool cmFindPackageCommand::InitialPass(std::vector<std::string> const& args)
|
||||
}
|
||||
}
|
||||
|
||||
// Limit package nesting depth well below the recursion depth limit because
|
||||
// find_package nesting uses more stack space than normal recursion.
|
||||
{
|
||||
static std::size_t const findPackageDepthMinMax = 100;
|
||||
std::size_t const findPackageDepthMax = std::max(
|
||||
this->Makefile->GetRecursionDepthLimit() / 2, findPackageDepthMinMax);
|
||||
std::size_t const findPackageDepth =
|
||||
this->Makefile->FindPackageRootPathStack.size() + 1;
|
||||
if (findPackageDepth > findPackageDepthMax) {
|
||||
this->SetError(cmStrCat("maximum nesting depth of ", findPackageDepthMax,
|
||||
" exceeded."));
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
this->PushFindPackageRootPathStack();
|
||||
|
||||
this->SetModuleVariables(components, componentVarDefs);
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
[0-9]+
|
||||
CMake Error at .*/FindRecursivePackage\.cmake:1 \(message\):
|
||||
Maximum recursion depth of [0-9]+ exceeded
|
||||
CMake Error at [^
|
||||
]*/Tests/RunCMake/MaxRecursionDepth/FindRecursivePackage.cmake:[0-9]+ \(find_package\):
|
||||
find_package maximum nesting depth of [0-9]+ exceeded.
|
||||
Call Stack \(most recent call first\):
|
||||
.*/FindRecursivePackage\.cmake:3 \(find_package\)
|
||||
[^
|
||||
]*/Tests/RunCMake/MaxRecursionDepth/FindRecursivePackage.cmake:[0-9]+ \(find_package\)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[0-9]+
|
||||
CMake Error at FindRecursivePackage\.cmake:1 \(message\):
|
||||
Maximum recursion depth of [0-9]+ exceeded
|
||||
CMake Error at FindRecursivePackage.cmake:[0-9]+ \(find_package\):
|
||||
find_package maximum nesting depth of [0-9]+ exceeded.
|
||||
Call Stack \(most recent call first\):
|
||||
FindRecursivePackage\.cmake:3 \(find_package\)
|
||||
FindRecursivePackage.cmake:[0-9]+ \(find_package\)
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
[0-9]+
|
||||
CMake Error at .*/FindRecursivePackage\.cmake:1 \(message\):
|
||||
Maximum recursion depth of [0-9]+ exceeded
|
||||
CMake Error at [^
|
||||
]*/Tests/RunCMake/MaxRecursionDepth/FindRecursivePackage.cmake:[0-9]+ \(find_package\):
|
||||
find_package maximum nesting depth of [0-9]+ exceeded.
|
||||
Call Stack \(most recent call first\):
|
||||
.*/FindRecursivePackage\.cmake:3 \(find_package\)
|
||||
[^
|
||||
]*/Tests/RunCMake/MaxRecursionDepth/FindRecursivePackage.cmake:[0-9]+ \(find_package\)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[0-9]+
|
||||
CMake Error at FindRecursivePackage\.cmake:1 \(message\):
|
||||
Maximum recursion depth of [0-9]+ exceeded
|
||||
CMake Error at FindRecursivePackage.cmake:[0-9]+ \(find_package\):
|
||||
find_package maximum nesting depth of [0-9]+ exceeded.
|
||||
Call Stack \(most recent call first\):
|
||||
FindRecursivePackage\.cmake:3 \(find_package\)
|
||||
FindRecursivePackage.cmake:[0-9]+ \(find_package\)
|
||||
|
||||
@@ -1,5 +1,7 @@
|
||||
[0-9]+
|
||||
CMake Error at .*/FindRecursivePackage\.cmake:1 \(message\):
|
||||
Maximum recursion depth of [0-9]+ exceeded
|
||||
CMake Error at [^
|
||||
]*/Tests/RunCMake/MaxRecursionDepth/FindRecursivePackage.cmake:[0-9]+ \(find_package\):
|
||||
find_package maximum nesting depth of [0-9]+ exceeded.
|
||||
Call Stack \(most recent call first\):
|
||||
.*/FindRecursivePackage\.cmake:3 \(find_package\)
|
||||
[^
|
||||
]*/Tests/RunCMake/MaxRecursionDepth/FindRecursivePackage.cmake:[0-9]+ \(find_package\)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
[0-9]+
|
||||
CMake Error at FindRecursivePackage\.cmake:1 \(message\):
|
||||
Maximum recursion depth of [0-9]+ exceeded
|
||||
CMake Error at FindRecursivePackage.cmake:[0-9]+ \(find_package\):
|
||||
find_package maximum nesting depth of [0-9]+ exceeded.
|
||||
Call Stack \(most recent call first\):
|
||||
FindRecursivePackage\.cmake:3 \(find_package\)
|
||||
FindRecursivePackage.cmake:[0-9]+ \(find_package\)
|
||||
|
||||
Reference in New Issue
Block a user