[Bf-blender-cvs] [a64782b1334] master: VSE: Implement sanity check for files with more channels than supported

Dalai Felinto noreply at git.blender.org
Tue Sep 28 10:23:19 CEST 2021


Commit: a64782b1334118d1bd98c78f665e7e0bfd232076
Author: Dalai Felinto
Date:   Mon Sep 27 15:05:23 2021 +0200
Branches: master
https://developer.blender.org/rBa64782b1334118d1bd98c78f665e7e0bfd232076

VSE: Implement sanity check for files with more channels than supported

This is a follow up to 8fecc2a8525467ee2fbbaae16ddbbc10b3050d46.

This makes sure future .blend files that have more channels than the
limit won't break Blender.

It can be backported to LTS.

This is part of https://developer.blender.org/D12645

Differential Revision: https://developer.blender.org/D12648

===================================================================

M	source/blender/blenkernel/intern/scene.c
M	source/blender/blenloader/BLO_readfile.h
M	source/blender/windowmanager/intern/wm_files.c

===================================================================

diff --git a/source/blender/blenkernel/intern/scene.c b/source/blender/blenkernel/intern/scene.c
index ccd3e0bfd6c..1dd7fcf1d1a 100644
--- a/source/blender/blenkernel/intern/scene.c
+++ b/source/blender/blenkernel/intern/scene.c
@@ -63,6 +63,8 @@
 #include "BLI_threads.h"
 #include "BLI_utildefines.h"
 
+#include "BLO_readfile.h"
+
 #include "BLT_translation.h"
 
 #include "BKE_action.h"
@@ -993,8 +995,13 @@ static void link_recurs_seq(BlendDataReader *reader, ListBase *lb)
 {
   BLO_read_list(reader, lb);
 
-  LISTBASE_FOREACH (Sequence *, seq, lb) {
-    if (seq->seqbase.first) {
+  LISTBASE_FOREACH_MUTABLE (Sequence *, seq, lb) {
+    /* Sanity check. */
+    if ((seq->machine < 1) || (seq->machine > MAXSEQ)) {
+      BLI_freelinkN(lb, seq);
+      BLO_read_data_reports(reader)->count.vse_strips_skipped++;
+    }
+    else if (seq->seqbase.first) {
       link_recurs_seq(reader, &seq->seqbase);
     }
   }
diff --git a/source/blender/blenloader/BLO_readfile.h b/source/blender/blenloader/BLO_readfile.h
index 9093c6fd85b..c6637b17d47 100644
--- a/source/blender/blenloader/BLO_readfile.h
+++ b/source/blender/blenloader/BLO_readfile.h
@@ -121,6 +121,8 @@ typedef struct BlendFileReadReport {
     int proxies_to_lib_overrides_success;
     /* Number of proxies that failed to convert to library overrides. */
     int proxies_to_lib_overrides_failures;
+    /* Number of VSE strips that were not read because were in non-supported channels. */
+    int vse_strips_skipped;
   } count;
 
   /* Number of libraries which had overrides that needed to be resynced, and a single linked list
diff --git a/source/blender/windowmanager/intern/wm_files.c b/source/blender/windowmanager/intern/wm_files.c
index bbab3a8b326..a5ebf988edd 100644
--- a/source/blender/windowmanager/intern/wm_files.c
+++ b/source/blender/windowmanager/intern/wm_files.c
@@ -871,6 +871,14 @@ static void file_read_reports_finalize(BlendFileReadReport *bf_reports)
                 bf_reports->count.linked_proxies);
   }
 
+  if (bf_reports->count.vse_strips_skipped != 0) {
+    BKE_reportf(bf_reports->reports,
+                RPT_ERROR,
+                "%d sequence strips were not read because they were in a channel larger than %d",
+                bf_reports->count.vse_strips_skipped,
+                MAXSEQ);
+  }
+
   BLI_linklist_free(bf_reports->resynced_lib_overrides_libraries, NULL);
   bf_reports->resynced_lib_overrides_libraries = NULL;
 }



More information about the Bf-blender-cvs mailing list