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>2022-04-04 17:27:37 +0300
committerRichard Antalik <richardantalik@gmail.com>2022-04-04 17:30:16 +0300
commite4289f23604a4dfa1b3ba45b9e5eaf7bf47f420c (patch)
treec236ae651a516826a716e14b0c785c39a03a2e86
parente7f4aa8f0cb617327e0358c134bc606bfb8742d4 (diff)
Fix errors in sequencer channel headers
Failing constraint test uncovered crashes on NULL dereference and missing channels initialization in `SEQ_editing_ensure()`.
-rw-r--r--source/blender/editors/screen/screen_context.c18
-rw-r--r--source/blender/editors/space_sequencer/sequencer_channels_draw.c5
-rw-r--r--source/blender/sequencer/intern/sequencer.c2
3 files changed, 17 insertions, 8 deletions
diff --git a/source/blender/editors/screen/screen_context.c b/source/blender/editors/screen/screen_context.c
index d718c8b0d95..11a62123ad7 100644
--- a/source/blender/editors/screen/screen_context.c
+++ b/source/blender/editors/screen/screen_context.c
@@ -647,18 +647,20 @@ static eContextResult screen_ctx_selected_editable_sequences(const bContext *C,
wmWindow *win = CTX_wm_window(C);
Scene *scene = WM_window_get_active_scene(win);
Editing *ed = SEQ_editing_get(scene);
+ if (ed == NULL) {
+ return CTX_RESULT_NO_DATA;
+ }
+
ListBase *channels = SEQ_channels_displayed_get(ed);
- if (ed) {
- LISTBASE_FOREACH (Sequence *, seq, ed->seqbasep) {
- if (seq->flag & SELECT && !SEQ_transform_is_locked(channels, seq)) {
- CTX_data_list_add(result, &scene->id, &RNA_Sequence, seq);
- }
+ LISTBASE_FOREACH (Sequence *, seq, ed->seqbasep) {
+ if (seq->flag & SELECT && !SEQ_transform_is_locked(channels, seq)) {
+ CTX_data_list_add(result, &scene->id, &RNA_Sequence, seq);
}
- CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
- return CTX_RESULT_OK;
}
- return CTX_RESULT_NO_DATA;
+ CTX_data_type_set(result, CTX_DATA_TYPE_COLLECTION);
+ return CTX_RESULT_OK;
}
+
static eContextResult screen_ctx_active_nla_track(const bContext *C, bContextDataResult *result)
{
PointerRNA ptr;
diff --git a/source/blender/editors/space_sequencer/sequencer_channels_draw.c b/source/blender/editors/space_sequencer/sequencer_channels_draw.c
index 5a43eade999..b4bb4e950f0 100644
--- a/source/blender/editors/space_sequencer/sequencer_channels_draw.c
+++ b/source/blender/editors/space_sequencer/sequencer_channels_draw.c
@@ -347,6 +347,11 @@ void channel_draw_context_init(const bContext *C,
void draw_channels(const bContext *C, ARegion *region)
{
+ Editing *ed = SEQ_editing_get(CTX_data_scene(C));
+ if (ed == NULL) {
+ return;
+ }
+
SeqChannelDrawContext context;
channel_draw_context_init(C, region, &context);
diff --git a/source/blender/sequencer/intern/sequencer.c b/source/blender/sequencer/intern/sequencer.c
index baa06e133b7..faa527786fd 100644
--- a/source/blender/sequencer/intern/sequencer.c
+++ b/source/blender/sequencer/intern/sequencer.c
@@ -245,6 +245,8 @@ Editing *SEQ_editing_ensure(Scene *scene)
ed->cache = NULL;
ed->cache_flag = SEQ_CACHE_STORE_FINAL_OUT;
ed->cache_flag |= SEQ_CACHE_STORE_RAW;
+ ed->displayed_channels = &ed->channels;
+ SEQ_channels_ensure(ed->displayed_channels);
}
return scene->ed;