From c11e64e7ae5665590c9d7c7ecc07594e9b55e7dd Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Tue, 7 Jun 2022 09:36:57 +0100 Subject: [PATCH 1/2] garray: Fix NULL-termination of GPtrArray copies The code was accidentally NULL-terminating the source array rather than the copy. This fixes commit ee247c0a2d. Spotted by the `array-test` installed test in https://gitlab.gnome.org/GNOME/glib/-/jobs/2047993. Signed-off-by: Philip Withnall --- glib/garray.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glib/garray.c b/glib/garray.c index 920a40258..fe9e570e9 100644 --- a/glib/garray.c +++ b/glib/garray.c @@ -1285,7 +1285,7 @@ g_ptr_array_copy (GPtrArray *array, new_array->len = array->len; } - ptr_array_null_terminate (rarray); + ptr_array_null_terminate ((GRealPtrArray *) new_array); } return new_array; From d0b0f8f90eb316f581ff10d3507e236e5f12b35b Mon Sep 17 00:00:00 2001 From: Philip Withnall Date: Tue, 7 Jun 2022 13:31:52 +0100 Subject: [PATCH 2/2] garray: Rename an internal helper to make its behaviour clearer MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `ptr_array_null_terminate()` only `NULL`-terminates the array if its `null_terminated` flag is set; otherwise it’s a no-op. Rename the function to `ptr_array_maybe_null_terminate()` to make that a bit clearer, and make it consistent with `g_ptr_array_maybe_expand()`. Signed-off-by: Philip Withnall --- glib/garray.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/glib/garray.c b/glib/garray.c index fe9e570e9..23b7cb8bc 100644 --- a/glib/garray.c +++ b/glib/garray.c @@ -1092,7 +1092,7 @@ static void g_ptr_array_maybe_expand (GRealPtrArray *array, guint len); static void -ptr_array_null_terminate (GRealPtrArray *rarray) +ptr_array_maybe_null_terminate (GRealPtrArray *rarray) { if (G_UNLIKELY (rarray->null_terminated)) rarray->pdata[rarray->len] = NULL; @@ -1123,7 +1123,7 @@ ptr_array_new (guint reserved_size, g_ptr_array_maybe_expand (array, reserved_size); if (null_terminated) { - /* don't use ptr_array_null_terminate(). It helps the compiler + /* don't use ptr_array_maybe_null_terminate(). It helps the compiler * to see when @null_terminated is false and thereby inline * ptr_array_new() and possibly remove the code entirely. */ array->pdata[0] = NULL; @@ -1285,7 +1285,7 @@ g_ptr_array_copy (GPtrArray *array, new_array->len = array->len; } - ptr_array_null_terminate ((GRealPtrArray *) new_array); + ptr_array_maybe_null_terminate ((GRealPtrArray *) new_array); } return new_array; @@ -1683,7 +1683,7 @@ g_ptr_array_set_size (GPtrArray *array, rarray->len = length_unsigned; - ptr_array_null_terminate (rarray); + ptr_array_maybe_null_terminate (rarray); } else if (length_unsigned < rarray->len) g_ptr_array_remove_range (array, length_unsigned, rarray->len - length_unsigned); @@ -1857,7 +1857,7 @@ g_ptr_array_remove_range (GPtrArray *array, rarray->pdata[rarray->len + i] = NULL; } else - ptr_array_null_terminate (rarray); + ptr_array_maybe_null_terminate (rarray); return array; } @@ -1958,7 +1958,7 @@ g_ptr_array_add (GPtrArray *array, rarray->pdata[rarray->len++] = data; - ptr_array_null_terminate (rarray); + ptr_array_maybe_null_terminate (rarray); } /** @@ -2021,7 +2021,7 @@ g_ptr_array_extend (GPtrArray *array_to_extend, rarray_to_extend->len += array->len; - ptr_array_null_terminate (rarray_to_extend); + ptr_array_maybe_null_terminate (rarray_to_extend); } /** @@ -2092,7 +2092,7 @@ g_ptr_array_insert (GPtrArray *array, rarray->len++; rarray->pdata[index_] = data; - ptr_array_null_terminate (rarray); + ptr_array_maybe_null_terminate (rarray); } /* Please keep this doc-comment in sync with pointer_array_sort_example()