From 2c8d91c3ccb5ab3411d4b3409431bd13e962b3b5 Mon Sep 17 00:00:00 2001 From: Jehan Date: Wed, 1 Apr 2026 17:55:29 +0200 Subject: [PATCH] app: further remove a variable length array. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes when compiling: > error: variable length array ‘mask_row_buf’ is used With this and previous commit, we can now compile with C++ flags -Werror=vla and get no build failures. --- app/core/gimppickable-contiguous-region.cc | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/app/core/gimppickable-contiguous-region.cc b/app/core/gimppickable-contiguous-region.cc index 433c3f5324..7a1de5467c 100644 --- a/app/core/gimppickable-contiguous-region.cc +++ b/app/core/gimppickable-contiguous-region.cc @@ -48,6 +48,9 @@ extern "C" (/* each thread costs as much as */ 64.0 * 64.0 /* pixels */) +static gfloat *mask_row_buf = NULL; +static gsize mask_row_buf_size = 0; + typedef struct { gint x; @@ -189,6 +192,9 @@ gimp_pickable_contiguous_region_by_seed (GimpPickable *pickable, } g_clear_object (&src_buffer); + g_clear_pointer (&mask_row_buf, g_free); + mask_row_buf_size = 0; + return mask_buffer; } @@ -694,6 +700,9 @@ gimp_pickable_contiguous_region_by_line_art (GimpPickable *pickable, if (free_src_buffer) g_object_unref (src_buffer); + g_clear_pointer (&mask_row_buf, g_free); + mask_row_buf_size = 0; + return mask_buffer; } @@ -990,10 +999,19 @@ find_contiguous_segment (const gfloat *col, gfloat *row) { gfloat *s; - gfloat mask_row_buf[src_extent->width]; - gfloat *mask_row = mask_row_buf - src_extent->x; + gfloat *mask_row; gfloat diff; + if (mask_row_buf == NULL || + (gsize) src_extent->width > mask_row_buf_size) + { + mask_row_buf_size = src_extent->width; + mask_row_buf = (gfloat *) g_realloc_n ((gpointer) mask_row_buf, + mask_row_buf_size, + sizeof (gfloat)); + } + mask_row = mask_row_buf - src_extent->x; + #ifdef FETCH_ROW gegl_buffer_get (src_buffer, GEGL_RECTANGLE (0, initial_y, width, 1), 1.0, src_format,