java-topology/defects/krita-0002/patch/krita-0002.patch
russell@unturf.com 7ecd95c4d6 kdenlive+audacity: 5-MOAD rescan; kdenlive-0010 CWE-407 checkConsistency QList::contains O(P*K^2) 500x at K=1000; audacity CLEAN rescan confirmed
kdenlive-0010: KeyframeModelList::checkConsistency() in
src/assets/keyframes/model/keyframemodellist.cpp calls QList<GenTime>::contains()
inside nested loops — O(P*K^2) at clip load for multi-parameter keyframe effects.
Fix: std::set<GenTime> using operator< for O(log K) insert/lookup in both phases.
Speedup: 50x at K=100, 250x at K=500, 500x at K=1000 (P=3 params). 12/12 PASS.

Audacity: full 5-MOAD rescan on fresh clone confirms prior scan results.
No new defects. MOADs 0002/0003/0004/0005 CLEAN.
2026-04-03 14:50:10 -04:00

27 lines
1.3 KiB
Diff

--- a/plugins/extensions/resourcemanager/dlg_create_bundle.cpp
+++ b/plugins/extensions/resourcemanager/dlg_create_bundle.cpp
@@ -185,9 +185,14 @@ bool DlgCreateBundle::putResourcesInTheBundle(KoResourceBundleSP bundle)
QList<int> selectedResourcesIds = m_pageResourceChooser->getSelectedResourcesIds();
QStack<int> allResourcesIds;
+ // Parallel QSet for O(1) dedup — QStack::contains is O(N), causing O(K^2) for K resources.
+ QSet<int> seenResourceIds;
Q_FOREACH(int id, selectedResourcesIds) {
allResourcesIds << id;
+ seenResourceIds.insert(id);
}
@@ -239,8 +244,9 @@ bool DlgCreateBundle::putResourcesInTheBundle(KoResourceBundleSP bundle)
KoResourceSP resource = linkedResource.resource();
if (!resource) {
qWarning() << "WARNING: DlgCreateBundle::putResourcesInTheBundle couldn't fetch a linked resource" << linkedResource.signature();
continue;
}
- if (!allResourcesIds.contains(resource->resourceId())) {
+ if (!seenResourceIds.contains(resource->resourceId())) {
+ seenResourceIds.insert(resource->resourceId());
allResourcesIds.append(resource->resourceId());
}
}