[gtk+] levelbar: Avoid a use-after-free
- From: Matthias Clasen <matthiasc src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] levelbar: Avoid a use-after-free
- Date: Fri, 26 Feb 2016 20:52:59 +0000 (UTC)
commit c784d5d700c7d6c03680eb21de19c8391e8ffac3
Author: Matthias Clasen <mclasen redhat com>
Date: Fri Feb 26 14:51:24 2016 -0500
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.
gtk/gtklevelbar.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
---
diff --git a/gtk/gtklevelbar.c b/gtk/gtklevelbar.c
index 46684cd..99317dc 100644
--- a/gtk/gtklevelbar.c
+++ b/gtk/gtklevelbar.c
@@ -241,6 +241,7 @@ gtk_level_bar_ensure_offset (GtkLevelBar *self,
{
GList *existing;
GtkLevelBarOffset *offset = NULL;
+ GtkLevelBarOffset *new_offset;
existing = g_list_find_custom (self->priv->offsets, name, offset_find_func);
if (existing)
@@ -249,14 +250,15 @@ gtk_level_bar_ensure_offset (GtkLevelBar *self,
if (offset && (offset->value == value))
return FALSE;
+ new_offset = gtk_level_bar_offset_new (name, value);
+
if (offset)
{
gtk_level_bar_offset_free (offset);
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, offset, offset_sort_func);
+ self->priv->offsets = g_list_insert_sorted (self->priv->offsets, new_offset, offset_sort_func);
return TRUE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]