44 lines
2.1 KiB
Diff
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;
|
|
}
|