summaryrefslogtreecommitdiff
path: root/src/core/constraints.c
diff options
context:
space:
mode:
authorVictor Kareh <[email protected]>2019-05-22 11:20:31 -0400
committerVictor Kareh <[email protected]>2019-06-05 10:49:37 -0400
commit43a58511565f293653f98e0dc77f240bd4d5e10f (patch)
tree98250dbe72856b8a79dccf2f7c6fe7e164dc857c /src/core/constraints.c
parentbfafcf554cda8b3f2c4e35aec3fbc033d63f8bba (diff)
downloadmarco-43a58511565f293653f98e0dc77f240bd4d5e10f.tar.bz2
marco-43a58511565f293653f98e0dc77f240bd4d5e10f.tar.xz
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 upstream commit: https://gitlab.gnome.org/GNOME/metacity/commit/7e7f25f4
Diffstat (limited to 'src/core/constraints.c')
-rw-r--r--src/core/constraints.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/core/constraints.c b/src/core/constraints.c
index 8f7e0d7e..c886d927 100644
--- a/src/core/constraints.c
+++ b/src/core/constraints.c
@@ -118,6 +118,7 @@ typedef struct
MetaRectangle orig;
MetaRectangle current;
MetaFrameBorders *borders;
+ gboolean must_free_borders;
ActionType action_type;
gboolean is_user_action;
@@ -339,7 +340,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);
}
@@ -360,9 +361,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;