forked from AuroraMiddleware/gtk
levelbar: Avoid a use-after-free
We were freeing the old offset before using its name to recreate a new one. Don't do that. Found by gcc's undefined behavior sanitizer.
This commit is contained in:
parent
5ca860dcaf
commit
c784d5d700
@ -241,6 +241,7 @@ gtk_level_bar_ensure_offset (GtkLevelBar *self,
|
|||||||
{
|
{
|
||||||
GList *existing;
|
GList *existing;
|
||||||
GtkLevelBarOffset *offset = NULL;
|
GtkLevelBarOffset *offset = NULL;
|
||||||
|
GtkLevelBarOffset *new_offset;
|
||||||
|
|
||||||
existing = g_list_find_custom (self->priv->offsets, name, offset_find_func);
|
existing = g_list_find_custom (self->priv->offsets, name, offset_find_func);
|
||||||
if (existing)
|
if (existing)
|
||||||
@ -249,14 +250,15 @@ gtk_level_bar_ensure_offset (GtkLevelBar *self,
|
|||||||
if (offset && (offset->value == value))
|
if (offset && (offset->value == value))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
|
new_offset = gtk_level_bar_offset_new (name, value);
|
||||||
|
|
||||||
if (offset)
|
if (offset)
|
||||||
{
|
{
|
||||||
gtk_level_bar_offset_free (offset);
|
gtk_level_bar_offset_free (offset);
|
||||||
self->priv->offsets = g_list_delete_link (self->priv->offsets, existing);
|
self->priv->offsets = g_list_delete_link (self->priv->offsets, existing);
|
||||||
}
|
}
|
||||||
|
|
||||||
offset = gtk_level_bar_offset_new (name, value);
|
self->priv->offsets = g_list_insert_sorted (self->priv->offsets, new_offset, offset_sort_func);
|
||||||
self->priv->offsets = g_list_insert_sorted (self->priv->offsets, offset, offset_sort_func);
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user