From 782f36d6a87eb622f6052be8ce49c380a6c78e84 Mon Sep 17 00:00:00 2001 From: Antonio Vazquez Date: Sat, 2 Nov 2019 10:28:08 +0100 Subject: Fix T71260: GPencil crash when drawing very long lines There were two problems: 1) When the buffer was reallocate, the pointer was corrupted. 2) Short variables were too small to hold long lines. --- source/blender/editors/gpencil/gpencil_paint.c | 2 +- source/blender/editors/gpencil/gpencil_utils.c | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'source/blender/editors/gpencil') diff --git a/source/blender/editors/gpencil/gpencil_paint.c b/source/blender/editors/gpencil/gpencil_paint.c index f29e782c618..bebdcb34326 100644 --- a/source/blender/editors/gpencil/gpencil_paint.c +++ b/source/blender/editors/gpencil/gpencil_paint.c @@ -3660,7 +3660,6 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event) tGPsdata *p = op->customdata; ToolSettings *ts = CTX_data_tool_settings(C); GP_Sculpt_Guide *guide = &p->scene->toolsettings->gp_sculpt.guide; - tGPspoint *points = (tGPspoint *)p->gpd->runtime.sbuffer; /* default exit state - pass through to support MMB view nav, etc. */ int estate = OPERATOR_PASS_THROUGH; @@ -3969,6 +3968,7 @@ static int gpencil_draw_modal(bContext *C, wmOperator *op, const wmEvent *event) int size_after = p->gpd->runtime.sbuffer_used; /* Last point of the event is always real (not fake). */ + tGPspoint *points = (tGPspoint *)p->gpd->runtime.sbuffer; tGPspoint *pt = &points[size_after - 1]; pt->tflag &= ~GP_TPOINT_FAKE; diff --git a/source/blender/editors/gpencil/gpencil_utils.c b/source/blender/editors/gpencil/gpencil_utils.c index b194d28a8b8..3ca993673d4 100644 --- a/source/blender/editors/gpencil/gpencil_utils.c +++ b/source/blender/editors/gpencil/gpencil_utils.c @@ -2530,8 +2530,8 @@ void ED_gpencil_select_toggle_all(bContext *C, int action) /* Ensure the SBuffer (while drawing stroke) size is enough to save all points of the stroke */ tGPspoint *ED_gpencil_sbuffer_ensure(tGPspoint *buffer_array, - short *buffer_size, - short *buffer_used, + int *buffer_size, + int *buffer_used, const bool clear) { tGPspoint *p = NULL; -- cgit v1.2.3