diff options
author | Thomas Haller <thaller@redhat.com> | 2015-08-18 14:28:57 +0200 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2015-08-18 15:16:33 +0200 |
commit | e04c3139efca06e7162063c75e7dad36f25a82ad (patch) | |
tree | 487e5dce7e6a7019c6ca40858f0bf1c66b37505e | |
parent | 502b45f0d41c5d7e5a45cc250d9ae6cc5022a23b (diff) | |
download | NetworkManager-e04c3139efca06e7162063c75e7dad36f25a82ad.tar.gz |
manager: fix memleak in system_hostname_changed_cb()
Also, no need to clone the hostname again.
Fixes: c9067d8fedf6f6f2d530fd68bbfca7ce68638d38
(cherry picked from commit 58a2e992943cf53929f7a39cdb29a26a904a2d19)
-rw-r--r-- | src/nm-manager.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/nm-manager.c b/src/nm-manager.c index 127afd5684..5ef2479512 100644 --- a/src/nm-manager.c +++ b/src/nm-manager.c @@ -1184,18 +1184,26 @@ system_hostname_changed_cb (NMSettings *settings, char *hostname; hostname = nm_settings_get_hostname (priv->settings); + + /* nm_settings_get_hostname() does not return an empty hostname. */ + nm_assert (!hostname || *hostname); + if (!hostname && !priv->hostname) return; - if (hostname && priv->hostname && !strcmp (hostname, priv->hostname)) + if (hostname && priv->hostname && !strcmp (hostname, priv->hostname)) { + g_free (hostname); return; + } + + /* realloc, to free possibly trailing data after NUL. */ + if (hostname) + hostname = g_realloc (hostname, strlen (hostname) + 1); g_free (priv->hostname); - priv->hostname = (hostname && strlen (hostname)) ? g_strdup (hostname) : NULL; + priv->hostname = hostname; g_object_notify (G_OBJECT (self), NM_MANAGER_HOSTNAME); nm_dhcp_manager_set_default_hostname (nm_dhcp_manager_get (), priv->hostname); - - g_free (hostname); } /*******************************************************************/ |