From 255347f87626c4715d0d661c6f8918676b341aee Mon Sep 17 00:00:00 2001 From: Pavel Vasin Date: Fri, 29 Jun 2012 13:20:08 +0400 Subject: [PATCH] constraints: fix mem leak in meta_window_constrain() MetaFrameBorders leaked when orig_borders != NULL and window->fullscreen == TRUE https://bugzilla.gnome.org/show_bug.cgi?id=679153 --- src/core/constraints.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/core/constraints.c b/src/core/constraints.c index e5e390f15..d555ec9f0 100644 --- a/src/core/constraints.c +++ b/src/core/constraints.c @@ -119,6 +119,7 @@ typedef struct MetaRectangle orig; MetaRectangle current; MetaFrameBorders *borders; + gboolean must_free_borders; ActionType action_type; gboolean is_user_action; @@ -337,7 +338,7 @@ meta_window_constrain (MetaWindow *window, * not gobject-style--gobject would be more pain than it's worth) or * smart pointers would be so much nicer here. *shrug* */ - if (!orig_borders) + if (info.must_free_borders) g_free (info.borders); } @@ -358,9 +359,15 @@ setup_constraint_info (ConstraintInfo *info, /* Create a fake frame geometry if none really exists */ if (orig_borders && !window->fullscreen) - info->borders = orig_borders; + { + info->borders = orig_borders; + info->must_free_borders = FALSE; + } else - info->borders = g_new0 (MetaFrameBorders, 1); + { + info->borders = g_new0 (MetaFrameBorders, 1); + info->must_free_borders = TRUE; + } if (flags & META_IS_MOVE_ACTION && flags & META_IS_RESIZE_ACTION) info->action_type = ACTION_MOVE_AND_RESIZE;