array: fix corrupt state of GPtrArray after g_ptr_array_extend_and_steal()

g_ptr_array_extend_and_steal() leaves the GPtrArray in an invalid state,
so if you would try to append another pointer, it leads to a crash.

Also adjust the test case so that it would result in the crash (without
the fix).

Fixes: 0675703af0 ('Adding g_ptr_array_extend_and_steal() function to glib/garray.c')
This commit is contained in:
Thomas Haller 2020-05-07 08:43:14 +02:00
parent 3b3026b763
commit 8b542aac0c
2 changed files with 3 additions and 0 deletions

View File

@ -1890,6 +1890,7 @@ g_ptr_array_extend_and_steal (GPtrArray *array_to_extend,
* to the elements moved from @array to @array_to_extend. */
pdata = g_steal_pointer (&array->pdata);
array->len = 0;
((GRealPtrArray *) array)->alloc = 0;
g_ptr_array_unref (array);
g_free (pdata);
}

View File

@ -1298,6 +1298,8 @@ pointer_array_extend_and_steal (void)
g_assert_cmpuint (ptr_array3->len, ==, 0);
g_assert_null (ptr_array3->pdata);
g_ptr_array_add (ptr_array2, NULL);
g_ptr_array_free (ptr_array, TRUE);
g_ptr_array_free (ptr_array3, TRUE);