[Bf-blender-cvs] [99ce71dd5b7] blender-v3.1-release: Fix T96518: Gpencil Fill freezes when use invert and click inside areas

Antonio Vazquez noreply at git.blender.org
Mon Mar 21 14:06:51 CET 2022


Commit: 99ce71dd5b756bcbd5d8dbbb71fe168dd62ef0f6
Author: Antonio Vazquez
Date:   Wed Mar 16 16:18:42 2022 +0100
Branches: blender-v3.1-release
https://developer.blender.org/rB99ce71dd5b756bcbd5d8dbbb71fe168dd62ef0f6

Fix T96518: Gpencil Fill freezes when use invert and click inside areas

When using inverted filling and click inside a closed area and not outside as is expected, the algorithm to detect the contour to fill is unable to find the filling shape and try to fill outside of the valid index.

The infinite loop was adding more memory for each loop and the process continued while there was system resources and finally crashed the system.

As the tool in negative mode is designed to fill all areas when you click outside of any shape, now the algorithm check if the outline is not working as expected and cancels the filling process.

===================================================================

M	source/blender/editors/gpencil/gpencil_fill.c

===================================================================

diff --git a/source/blender/editors/gpencil/gpencil_fill.c b/source/blender/editors/gpencil/gpencil_fill.c
index fcb97e8faf4..81a64a91917 100644
--- a/source/blender/editors/gpencil/gpencil_fill.c
+++ b/source/blender/editors/gpencil/gpencil_fill.c
@@ -1403,6 +1403,15 @@ static void gpencil_get_outline_points(tGPDfill *tgpf, const bool dilate)
       current_check_co[1] = boundary_co[1] + offset[offset_idx][1];
 
       int image_idx = ibuf->x * current_check_co[1] + current_check_co[0];
+      /* Check if the index is inside the image. If the index is outside is
+       * because the algorithm is unable to find the outline of the figure. This is
+       * possible for negative filling when click inside a figure instead of
+       * clicking outside.
+       * If the index is out of range, finish the filling. */
+      if (image_idx > imagesize - 1) {
+        start_found = false;
+        break;
+      }
       get_pixel(ibuf, image_idx, rgba);
 
       /* find next boundary pixel */



More information about the Bf-blender-cvs mailing list