java-topology/defects/kdenlive/patch/kdenlive-0006-timelinecontroller-canceled-guides-linear-find.patch

44 lines
2.1 KiB
Diff

# UNDF: UNDF-2026-000000836
# UNDF: (leave blank)
# Defect: kdenlive-0006
# Component: src/timeline2/view/timelinecontroller.cpp
# Pattern: CWE-407 — std::find on canceled vector in loop over guides
# Severity: MEDIUM — O(G*C) where G=guides, C=canceled/ignored guide positions
# Fix: Convert canceled vector to std::unordered_set<int> for O(1) lookup
--- a/src/timeline2/view/timelinecontroller.cpp
+++ b/src/timeline2/view/timelinecontroller.cpp
@@ gotoNextGuide()
void TimelineController::gotoNextGuide()
{
QList<CommentedTime> guides = m_model->getGuideModel()->getAllMarkers();
- std::vector<int> canceled = m_model->getFilteredGuideModel()->getIgnoredSnapPoints();
+ std::vector<int> canceledVec = m_model->getFilteredGuideModel()->getIgnoredSnapPoints();
+ std::unordered_set<int> canceled(canceledVec.begin(), canceledVec.end());
int pos = pCore->getMonitorPosition();
double fps = pCore->getCurrentFps();
int guidePos = 0;
for (auto &guide : std::as_const(guides)) {
guidePos = guide.time().frames(fps);
- if (std::find(canceled.begin(), canceled.end(), guidePos) != canceled.end()) {
+ if (canceled.count(guidePos)) {
continue;
}
if (guidePos > pos) {
@@ gotoPreviousGuide()
void TimelineController::gotoPreviousGuide()
{
if (pCore->getMonitorPosition() > 0) {
QList<CommentedTime> guides = m_model->getGuideModel()->getAllMarkers();
- std::vector<int> canceled = m_model->getFilteredGuideModel()->getIgnoredSnapPoints();
+ std::vector<int> canceledVec = m_model->getFilteredGuideModel()->getIgnoredSnapPoints();
+ std::unordered_set<int> canceled(canceledVec.begin(), canceledVec.end());
int pos = pCore->getMonitorPosition();
double fps = pCore->getCurrentFps();
int lastGuidePos = 0;
int guidePos = 0;
for (auto &guide : std::as_const(guides)) {
guidePos = guide.time().frames(fps);
- if (std::find(canceled.begin(), canceled.end(), guidePos) != canceled.end()) {
+ if (canceled.count(guidePos)) {
continue;
}