java-topology/defects/cmake-0006/patch/cmake-0006-writtensettings-unordered-set.patch
russell@unturf.com fb1ff685c1 cmake+mpd: 5-MOAD scan; 3 new CWE-407 defects, MPD CLEAN all 5 MOADs
cmake-0005: cmQtAutoGen MergeOptions std::find over baseOpts in newOpts loop, O(N*M), 31.5x at N=M=50
cmake-0006: cmVisualStudio10TargetGenerator FinishWritingSource writtenSettings O(S^2), 15.3x at S=30
cmake-0007: cmGeneratorExpressionNode TargetRuntimeDllDirsNode dllDirs O(D^2), 10.3x at D=100

MPD: all 5 MOADs CLEAN; updated CLEAN.md with MOAD-0002 through MOAD-0005 analysis.
Unit tests: 3/3 PASS.
2026-03-31 22:31:15 -04:00

31 lines
1.3 KiB
Diff

# UNDF:
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -2775,10 +2775,10 @@ void cmVisualStudio10TargetGenerator::FinishWritingSource(
Elem& e2, ConfigToSettings const& toolSettings)
{
- std::vector<std::string> writtenSettings;
+ std::unordered_set<std::string> writtenSettings;
for (auto const& configSettings : toolSettings) {
for (auto const& setting : configSettings.second) {
- if (std::find(writtenSettings.begin(), writtenSettings.end(),
- setting.first) != writtenSettings.end()) {
+ if (writtenSettings.count(setting.first)) {
continue;
}
if (PropertyIsSameInAllConfigs(toolSettings, setting.first)) {
e2.Element(setting.first, setting.second);
- writtenSettings.push_back(setting.first);
+ writtenSettings.insert(setting.first);
} else {
e2.WritePlatformConfigTag(setting.first,
cmStrCat("'$(Configuration)|$(Platform)'=='",
--- a/Source/cmVisualStudio10TargetGenerator.cxx
+++ b/Source/cmVisualStudio10TargetGenerator.cxx
@@ -1,6 +1,7 @@
/* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
file LICENSE.rst or https://cmake.org/licensing for details. */
#include "cmVisualStudio10TargetGenerator.h"
+#include <unordered_set>