From 40aee0b2e921dbbd4beeaaa4314c5f228600a47f Mon Sep 17 00:00:00 2001 From: Julian Eisel Date: Tue, 14 Dec 2021 20:57:39 +0100 Subject: Fix possible use-after-free on error handling during VR view drawing Whenever an exception happens in VR session code, we cancel the entire session. Alongside that, we removed the "surface" item used to draw into an offscreen context. This would mess up the iterator of the surface draw loop. Similar to 7afd84df409a. --- source/blender/windowmanager/intern/wm_surface.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/source/blender/windowmanager/intern/wm_surface.c b/source/blender/windowmanager/intern/wm_surface.c index 39bff205cbd..385b55f36f9 100644 --- a/source/blender/windowmanager/intern/wm_surface.c +++ b/source/blender/windowmanager/intern/wm_surface.c @@ -45,7 +45,8 @@ static wmSurface *g_drawable = NULL; void wm_surfaces_iter(bContext *C, void (*cb)(bContext *C, wmSurface *)) { - LISTBASE_FOREACH (wmSurface *, surf, &global_surface_list) { + /* Mutable iterator in case a surface is freed. */ + LISTBASE_FOREACH_MUTABLE (wmSurface *, surf, &global_surface_list) { cb(C, surf); } } -- cgit v1.2.3