mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2025-02-19 08:42:09 +01:00
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: 0675703af08d ('Adding g_ptr_array_extend_and_steal() function to glib/garray.c')
This commit is contained in:
parent
d020a73b66
commit
ebc518da45
@ -1870,6 +1870,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);
|
||||
}
|
||||
|
@ -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);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user