[Bf-blender-cvs] [de3e797d47e] blender-v2.83-release: Fix T78636: Crash displaying many aligned buttons
Campbell Barton
noreply at git.blender.org
Wed Jul 29 10:53:10 CEST 2020
Commit: de3e797d47e9572e5d558b70fc96b2d67c1b5d17
Author: Campbell Barton
Date: Thu Jul 16 16:32:55 2020 +1000
Branches: blender-v2.83-release
https://developer.blender.org/rBde3e797d47e9572e5d558b70fc96b2d67c1b5d17
Fix T78636: Crash displaying many aligned buttons
Displaying user preferences search crashed on macOS when the search
contained a common character such as 'E'.
This caused alignment to 'alloca' too much memory.
Replace with a heap allocation fallback.
===================================================================
M source/blender/editors/interface/interface_align.c
===================================================================
diff --git a/source/blender/editors/interface/interface_align.c b/source/blender/editors/interface/interface_align.c
index acbdf564054..ed8862d161f 100644
--- a/source/blender/editors/interface/interface_align.c
+++ b/source/blender/editors/interface/interface_align.c
@@ -31,6 +31,8 @@
#include "interface_intern.h"
+#include "MEM_guardedalloc.h"
+
#ifdef USE_UIBUT_SPATIAL_ALIGN
/**
@@ -436,7 +438,16 @@ void ui_block_align_calc(uiBlock *block, const ARegion *region)
return;
}
- butal_array = alloca(sizeof(*butal_array) * (size_t)num_buttons);
+ /* Note that this is typically less than ~20, and almost always under ~100.
+ * Even so, we can't ensure this value won't exceed available stack memory.
+ * Fallback to allocation instead of using #alloca, see: T78636. */
+ ButAlign butal_array_buf[256];
+ if (num_buttons <= ARRAY_SIZE(butal_array_buf)) {
+ butal_array = butal_array_buf;
+ }
+ else {
+ butal_array = MEM_mallocN(sizeof(*butal_array) * num_buttons, __func__);
+ }
memset(butal_array, 0, sizeof(*butal_array) * (size_t)num_buttons);
/* Second loop: we initialize our ButAlign data for each button. */
@@ -535,6 +546,9 @@ void ui_block_align_calc(uiBlock *block, const ARegion *region)
}
}
}
+ if (butal_array_buf != butal_array) {
+ MEM_freeN(butal_array);
+ }
}
# undef SIDE_TO_UI_BUT_ALIGN
More information about the Bf-blender-cvs
mailing list