[Bf-blender-cvs] [0f7becece7f] blender-v2.93-release: Fix T88551: Crash accessing uninitialized tool settings

Richard Antalik noreply at git.blender.org
Tue May 25 15:09:21 CEST 2021


Commit: 0f7becece7fd829f8ccb9c0fdcb5b929fc25fb70
Author: Richard Antalik
Date:   Tue May 25 15:02:31 2021 +0200
Branches: blender-v2.93-release
https://developer.blender.org/rB0f7becece7fd829f8ccb9c0fdcb5b929fc25fb70

Fix T88551: Crash accessing uninitialized tool settings

Tool settings for sequencer were not initialized, which caused crash
when adding strips.

There was fix for same issue in versioning rB0f81dafe6cec, but
subversion was not bumped, so files with uninitialized tool settings
may still exist.

Add `SEQ_tool_settings_get()` accessor function that will initialize
tool settings if they are missing. Change operator code to use
`SEQ_tool_settings_fit_method_get()` function instead of accessing
tool settings directly

Reviewed By: campbellbarton

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

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

M	source/blender/editors/space_sequencer/sequencer_add.c
M	source/blender/sequencer/SEQ_sequencer.h
M	source/blender/sequencer/intern/sequencer.c

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

diff --git a/source/blender/editors/space_sequencer/sequencer_add.c b/source/blender/editors/space_sequencer/sequencer_add.c
index a61260acfb2..68c0f4f4bdb 100644
--- a/source/blender/editors/space_sequencer/sequencer_add.c
+++ b/source/blender/editors/space_sequencer/sequencer_add.c
@@ -1083,8 +1083,7 @@ static int sequencer_add_image_strip_invoke(bContext *C,
 
   sequencer_disable_one_time_properties(C, op);
 
-  const SequencerToolSettings *tool_settings = scene->toolsettings->sequencer_tool_settings;
-  RNA_enum_set(op->ptr, "fit_method", tool_settings->fit_method);
+  RNA_enum_set(op->ptr, "fit_method", SEQ_tool_settings_fit_method_get(scene));
 
   /* Name set already by drag and drop. */
   if (RNA_struct_property_is_set(op->ptr, "files") && RNA_collection_length(op->ptr, "files")) {
diff --git a/source/blender/sequencer/SEQ_sequencer.h b/source/blender/sequencer/SEQ_sequencer.h
index 85513faf3e6..236ca1a9195 100644
--- a/source/blender/sequencer/SEQ_sequencer.h
+++ b/source/blender/sequencer/SEQ_sequencer.h
@@ -54,6 +54,7 @@ enum {
 #define SEQ_DUPE_IS_RECURSIVE_CALL (1 << 4)
 
 struct SequencerToolSettings *SEQ_tool_settings_init(void);
+struct SequencerToolSettings *SEQ_tool_settings_ensure(struct Scene *scene);
 void SEQ_tool_settings_free(struct SequencerToolSettings *tool_settings);
 eSeqImageFitMethod SEQ_tool_settings_fit_method_get(struct Scene *scene);
 void SEQ_tool_settings_fit_method_set(struct Scene *scene, eSeqImageFitMethod fit_method);
diff --git a/source/blender/sequencer/intern/sequencer.c b/source/blender/sequencer/intern/sequencer.c
index cc11796496c..b00c36ad8e4 100644
--- a/source/blender/sequencer/intern/sequencer.c
+++ b/source/blender/sequencer/intern/sequencer.c
@@ -313,6 +313,17 @@ SequencerToolSettings *SEQ_tool_settings_init(void)
   return tool_settings;
 }
 
+SequencerToolSettings *SEQ_tool_settings_ensure(Scene *scene)
+{
+  SequencerToolSettings *tool_settings = scene->toolsettings->sequencer_tool_settings;
+  if (tool_settings == NULL) {
+    scene->toolsettings->sequencer_tool_settings = SEQ_tool_settings_init();
+    tool_settings = scene->toolsettings->sequencer_tool_settings;
+  }
+
+  return tool_settings;
+}
+
 void SEQ_tool_settings_free(SequencerToolSettings *tool_settings)
 {
   MEM_freeN(tool_settings);
@@ -320,13 +331,13 @@ void SEQ_tool_settings_free(SequencerToolSettings *tool_settings)
 
 eSeqImageFitMethod SEQ_tool_settings_fit_method_get(Scene *scene)
 {
-  const SequencerToolSettings *tool_settings = scene->toolsettings->sequencer_tool_settings;
+  const SequencerToolSettings *tool_settings = SEQ_tool_settings_ensure(scene);
   return tool_settings->fit_method;
 }
 
 void SEQ_tool_settings_fit_method_set(Scene *scene, eSeqImageFitMethod fit_method)
 {
-  SequencerToolSettings *tool_settings = scene->toolsettings->sequencer_tool_settings;
+  SequencerToolSettings *tool_settings = SEQ_tool_settings_ensure(scene);
   tool_settings->fit_method = fit_method;
 }



More information about the Bf-blender-cvs mailing list