[multimedia/kdenlive/release/26.08] src/timeline2: Fix allowing 0 length composition causing crash
Jean-Baptiste Mardelle <[email protected]>
| Newsgroups | gmane.comp.kde.cvs |
|---|---|
| Message-ID | <[email protected]> |
Git commit 3c360c62be755be4c74dcab0136aaea07a139137 by Jean-Baptiste Mardelle.
Committed on 22/07/2026 at 05:35.
Pushed by mardelle into branch 'release/26.08'.
Fix allowing 0 length composition causing crash
Related to #2218
M +1 -3 src/timeline2/model/timelinemodel.cpp
M +6 -2 src/timeline2/view/timelinecontroller.cpp
https://invent.kde.org/multimedia/kdenlive/-/commit/3c360c62be755be4c74dcab0136aaea07a139137
diff --git a/src/timeline2/model/timelinemodel.cpp b/src/timeline2/model/timelinemodel.cpp
index 3a8df7d359..547d83ba36 100644
--- a/src/timeline2/model/timelinemodel.cpp
+++ b/src/timeline2/model/timelinemodel.cpp
@@ -6239,6 +6239,7 @@ bool TimelineModel::requestCompositionInsertion(const QString &transitionId, int
// TRACE(transitionId, trackId, position, length, transProps.get(), id, logUndo);
Fun undo = []() { return true; };
Fun redo = []() { return true; };
+ Q_ASSERT(length > 0);
bool result = requestCompositionInsertion(transitionId, trackId, -1, position, length, std::move(transProps), id, undo, redo, logUndo);
if (result && logUndo) {
PUSH_UNDO(undo, redo, i18n("Insert Composition"));
@@ -6282,9 +6283,6 @@ bool TimelineModel::requestCompositionInsertion(const QString &transitionId, int
return true;
};
bool res = requestCompositionMove(compositionId, trackId, compositionTrack, position, true, finalMove, local_undo, local_redo);
- if (res) {
- res = requestItemResize(compositionId, length, true, true, local_undo, local_redo, true);
- }
if (!res) {
bool undone = local_undo();
Q_ASSERT(undone);
diff --git a/src/timeline2/view/timelinecontroller.cpp b/src/timeline2/view/timelinecontroller.cpp
index 143d60f8ce..49e110df4a 100644
--- a/src/timeline2/view/timelinecontroller.cpp
+++ b/src/timeline2/view/timelinecontroller.cpp
@@ -637,16 +637,20 @@ int TimelineController::insertNewComposition(int tid, int clipId, int offset, QS
bool isShortComposition = TransitionsRepository::get()->getType(transitionId) == AssetListType::AssetType::VideoShortComposition;
if (duration < 0 || (isShortComposition && duration > 1.5 * defaultLength)) {
duration = defaultLength;
- } else if (duration <= 1) {
+ } else if (duration <= 1 && duration < clip_duration) {
// if suggested composition duration is lower than 4 frames, use default
duration = pCore->getDurationFromString(KdenliveSettings::transition_duration());
if (minimumPos + clip_duration - position < 3) {
- position = minimumPos + clip_duration - duration;
+ position = qMax(minimumPos, minimumPos + clip_duration - duration);
}
}
QPair<int, int> finalPos = m_model->getTrackById_const(tid)->validateCompositionLength(position, offset, duration, endPos);
position = finalPos.first;
duration = finalPos.second;
+ if (duration == 0) {
+ pCore->displayMessage(i18n("Could not add composition at selected position"), ErrorMessage, 500);
+ return -1;
+ }
std::unique_ptr<Mlt::Properties> props(nullptr);
if (TransitionsRepository::get()->isLuma(transitionId)) {