Skip to content

Commit e85b609

Browse files
committed
eventhandler: Guard against null canvas
1 parent f6f8f81 commit e85b609

File tree

2 files changed

+13
-10
lines changed

2 files changed

+13
-10
lines changed

src/eventhandler/EventHandler_SceneItems.cpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ void EventHandler::HandleSceneItemCreated(void *param, calldata_t *data)
5050
return;
5151

5252
OBSCanvasAutoRelease canvas = obs_source_get_canvas(obs_scene_get_source(scene));
53-
if (!(obs_canvas_get_flags(canvas) & MAIN))
53+
if (!canvas || !(obs_canvas_get_flags(canvas) & MAIN))
5454
return;
5555

5656
json eventData;
@@ -95,7 +95,7 @@ void EventHandler::HandleSceneItemRemoved(void *param, calldata_t *data)
9595
return;
9696

9797
OBSCanvasAutoRelease canvas = obs_source_get_canvas(obs_scene_get_source(scene));
98-
if (!(obs_canvas_get_flags(canvas) & MAIN))
98+
if (!canvas || !(obs_canvas_get_flags(canvas) & MAIN))
9999
return;
100100

101101
json eventData;
@@ -131,7 +131,7 @@ void EventHandler::HandleSceneItemListReindexed(void *param, calldata_t *data)
131131
return;
132132

133133
OBSCanvasAutoRelease canvas = obs_source_get_canvas(obs_scene_get_source(scene));
134-
if (!(obs_canvas_get_flags(canvas) & MAIN))
134+
if (!canvas || !(obs_canvas_get_flags(canvas) & MAIN))
135135
return;
136136

137137
json eventData;
@@ -172,7 +172,7 @@ void EventHandler::HandleSceneItemEnableStateChanged(void *param, calldata_t *da
172172
bool sceneItemEnabled = calldata_bool(data, "visible");
173173

174174
OBSCanvasAutoRelease canvas = obs_source_get_canvas(obs_scene_get_source(scene));
175-
if (!(obs_canvas_get_flags(canvas) & MAIN))
175+
if (!canvas || !(obs_canvas_get_flags(canvas) & MAIN))
176176
return;
177177

178178
json eventData;
@@ -214,7 +214,7 @@ void EventHandler::HandleSceneItemLockStateChanged(void *param, calldata_t *data
214214
bool sceneItemLocked = calldata_bool(data, "locked");
215215

216216
OBSCanvasAutoRelease canvas = obs_source_get_canvas(obs_scene_get_source(scene));
217-
if (!(obs_canvas_get_flags(canvas) & MAIN))
217+
if (!canvas || !(obs_canvas_get_flags(canvas) & MAIN))
218218
return;
219219

220220
json eventData;
@@ -253,7 +253,7 @@ void EventHandler::HandleSceneItemSelected(void *param, calldata_t *data)
253253
return;
254254

255255
OBSCanvasAutoRelease canvas = obs_source_get_canvas(obs_scene_get_source(scene));
256-
if (!(obs_canvas_get_flags(canvas) & MAIN))
256+
if (!canvas || !(obs_canvas_get_flags(canvas) & MAIN))
257257
return;
258258

259259
json eventData;
@@ -295,7 +295,7 @@ void EventHandler::HandleSceneItemTransformChanged(void *param, calldata_t *data
295295
return;
296296

297297
OBSCanvasAutoRelease canvas = obs_source_get_canvas(obs_scene_get_source(scene));
298-
if (!(obs_canvas_get_flags(canvas) & MAIN))
298+
if (!canvas || !(obs_canvas_get_flags(canvas) & MAIN))
299299
return;
300300

301301
json eventData;

src/eventhandler/EventHandler_Scenes.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ with this program. If not, see <https://www.gnu.org/licenses/>
3737
void EventHandler::HandleSceneCreated(obs_source_t *source)
3838
{
3939
OBSCanvasAutoRelease canvas = obs_source_get_canvas(source);
40-
if (!(obs_canvas_get_flags(canvas) & MAIN))
40+
if (!canvas || !(obs_canvas_get_flags(canvas) & MAIN))
4141
return;
4242

4343
json eventData;
@@ -65,7 +65,10 @@ void EventHandler::HandleSceneCreated(obs_source_t *source)
6565
void EventHandler::HandleSceneRemoved(obs_source_t *source)
6666
{
6767
OBSCanvasAutoRelease canvas = obs_source_get_canvas(source);
68-
if (!(obs_canvas_get_flags(canvas) & MAIN))
68+
// NOTE: Groups do not emit source_remove when they are deleted and canvas will already be NULL
69+
// during source_destroy. As a result, this event will never be emitted here for groups.
70+
// This should be fixed in the future when more thorough canvas support is added.
71+
if (!canvas || !(obs_canvas_get_flags(canvas) & MAIN))
6972
return;
7073

7174
json eventData;
@@ -93,7 +96,7 @@ void EventHandler::HandleSceneRemoved(obs_source_t *source)
9396
void EventHandler::HandleSceneNameChanged(obs_source_t *source, std::string oldSceneName, std::string sceneName)
9497
{
9598
OBSCanvasAutoRelease canvas = obs_source_get_canvas(source);
96-
if (!(obs_canvas_get_flags(canvas) & MAIN))
99+
if (!canvas || !(obs_canvas_get_flags(canvas) & MAIN))
97100
return;
98101

99102
json eventData;

0 commit comments

Comments
 (0)