diff --git a/glib/gdataset.c b/glib/gdataset.c index cc19c9674..2ac78b9d5 100644 --- a/glib/gdataset.c +++ b/glib/gdataset.c @@ -504,7 +504,7 @@ g_data_remove_internal (GData **datalist, GDataElt *old, *data, *data_end; gsize found_keys; - old = g_newa (GDataElt, n_keys); + old = g_newa0 (GDataElt, n_keys); data = d->data; data_end = data + d->len; @@ -518,6 +518,7 @@ g_data_remove_internal (GData **datalist, { if (data->key == keys[i]) { + old[i] = *data; remove = TRUE; break; } @@ -525,7 +526,6 @@ g_data_remove_internal (GData **datalist, if (remove) { - old[found_keys] = *data; found_keys++; if (data < --data_end) @@ -553,7 +553,7 @@ g_data_remove_internal (GData **datalist, { g_datalist_unlock (datalist); - for (gsize i = 0; i < found_keys; i++) + for (gsize i = 0; i < n_keys; i++) { if (old[i].destroy) old[i].destroy (old[i].data);