cmGlobalGenerator: clear RuntimeDependencySet members at configure

Commit f2617cf8e6 (Source: Add cmInstallRuntimeDependencySet,
2021-05-19) introduced via !6186 to 3.21 added storage to the global
generator for runtime dependency sets. However, this was not cleared at
the start of configure in the `ClearGeneratorMembers()` method. When
using `ccmake` to configure (and, presumably `cmake-gui` too), projects
using `install(TARGETS … RUNTIME_DEPENDENCY_SET)` would use dependency
set tracking instances from previous configure runs that held references
to targets free'd with the `cmMakefile` instance that held them.

Clear the dependency sets at the beginning of configure so that they are
not remembered and trigger via use-after-free bugs when used.

Fixes: #25446
This commit is contained in:
Ben Boeckel
2023-11-28 21:10:38 -05:00
parent 01deb58098
commit d01120a47a

View File

@@ -1999,6 +1999,8 @@ void cmGlobalGenerator::ClearGeneratorMembers()
this->DirectoryContentMap.clear();
this->BinaryDirectories.clear();
this->GeneratedFiles.clear();
this->RuntimeDependencySets.clear();
this->RuntimeDependencySetsByName.clear();
}
void cmGlobalGenerator::ComputeTargetObjectDirectory(