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/blenkernel/intern/sequencer.c
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/blenkernel/intern/sequencer.c')
-rw-r--r--source/blender/blenkernel/intern/sequencer.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c
index 2373a052f46..742b20c7de9 100644
--- a/source/blender/blenkernel/intern/sequencer.c
+++ b/source/blender/blenkernel/intern/sequencer.c
@@ -6046,3 +6046,26 @@ bool BKE_sequencer_check_scene_recursion(Scene *scene, ReportList *reports)
return false;
}
+
+/* Check if "seq_main" (indirectly) uses strip "seq". */
+bool BKE_sequencer_render_loop_check(Sequence *seq_main, Sequence *seq)
+{
+ if (seq_main == seq) {
+ return true;
+ }
+
+ if (seq_main->seq1 && BKE_sequencer_render_loop_check(seq_main->seq1, seq) ||
+ seq_main->seq2 && BKE_sequencer_render_loop_check(seq_main->seq2, seq) ||
+ seq_main->seq3 && BKE_sequencer_render_loop_check(seq_main->seq3, seq)) {
+ return true;
+ }
+
+ SequenceModifierData *smd;
+ for (smd = seq_main->modifiers.first; smd; smd = smd->next) {
+ if (smd->mask_sequence && BKE_sequencer_render_loop_check(smd->mask_sequence, seq)) {
+ return true;
+ }
+ }
+
+ return false;
+}