Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Antalik <richardantalik@gmail.com>2020-07-26 15:58:44 +0300
committerRichard Antalik <richardantalik@gmail.com>2020-07-26 16:00:37 +0300
commit7ceb6ffe57e1078498315807fbd551c925fc93d5 (patch)
tree48050dd122dd91c66a01f267983f43c011721793 /source/blender/editors/space_sequencer
parentf2907b06f4dacb87b41d464074f21068f27e8204 (diff)
Fix T74958: Infinite loop on using strip as modifier mask
Add recursion check before assigning strip as a mask for modifier. Same check is used for recursion check when reassigning effect input, so it should not be possible to create recursion at all.
Diffstat (limited to 'source/blender/editors/space_sequencer')
-rw-r--r--source/blender/editors/space_sequencer/sequencer_edit.c34
1 files changed, 6 insertions, 28 deletions
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index 0d8e0a87694..ce4fc0ff538 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -467,30 +467,6 @@ static bool seq_is_parent(Sequence *par, Sequence *seq)
return ((par->seq1 == seq) || (par->seq2 == seq) || (par->seq3 == seq));
}
-static bool seq_is_predecessor(Sequence *pred, Sequence *seq)
-{
- if (!pred) {
- return 0;
- }
- if (pred == seq) {
- return 0;
- }
- if (seq_is_parent(pred, seq)) {
- return 1;
- }
- if (pred->seq1 && seq_is_predecessor(pred->seq1, seq)) {
- return 1;
- }
- if (pred->seq2 && seq_is_predecessor(pred->seq2, seq)) {
- return 1;
- }
- if (pred->seq3 && seq_is_predecessor(pred->seq3, seq)) {
- return 1;
- }
-
- return 0;
-}
-
/** \} */
/* -------------------------------------------------------------------- */
@@ -2233,14 +2209,16 @@ static int sequencer_reassign_inputs_exec(bContext *C, wmOperator *op)
}
if (!seq_effect_find_selected(
- scene, last_seq, last_seq->type, &seq1, &seq2, &seq3, &error_msg)) {
+ scene, last_seq, last_seq->type, &seq1, &seq2, &seq3, &error_msg) ||
+ BKE_sequence_effect_get_num_inputs(last_seq->type) == 0) {
BKE_report(op->reports, RPT_ERROR, error_msg);
return OPERATOR_CANCELLED;
}
/* Check if reassigning would create recursivity. */
- if (seq_is_predecessor(seq1, last_seq) || seq_is_predecessor(seq2, last_seq) ||
- seq_is_predecessor(seq3, last_seq)) {
- BKE_report(op->reports, RPT_ERROR, "Cannot reassign inputs: no cycles allowed");
+ if (BKE_sequencer_render_loop_check(seq1, last_seq) ||
+ BKE_sequencer_render_loop_check(seq2, last_seq) ||
+ BKE_sequencer_render_loop_check(seq3, last_seq)) {
+ BKE_report(op->reports, RPT_ERROR, "Cannot reassign inputs: recursion detected.");
return OPERATOR_CANCELLED;
}