diff options
author | Thomas Haller <thaller@redhat.com> | 2017-01-04 12:45:03 +0100 |
---|---|---|
committer | Thomas Haller <thaller@redhat.com> | 2017-01-04 14:05:22 +0100 |
commit | 674f5f24af90fe746e2f0465e7ade8b394d84d73 (patch) | |
tree | ad69f27a403cba9f837bba24183a5620925545f2 | |
parent | 44ab504cf77963f0d246bdf695b9a2d5ec0b1603 (diff) | |
download | NetworkManager-674f5f24af90fe746e2f0465e7ade8b394d84d73.tar.gz |
dns: fix memleak in _get_config_variant()
There are cases where we wouldn't call g_variant_builder_end()
on @strv_builder and @entry_builder.
Fixes: e3c67177ac7234923f53c51473f77df8a2cb0f20
-rw-r--r-- | src/dns/nm-dns-manager.c | 41 |
1 files changed, 20 insertions, 21 deletions
diff --git a/src/dns/nm-dns-manager.c b/src/dns/nm-dns-manager.c index 0f4e098e61..dfd2fce19e 100644 --- a/src/dns/nm-dns-manager.c +++ b/src/dns/nm-dns-manager.c @@ -1860,9 +1860,6 @@ _get_config_variant (NMDnsManager *self) gboolean v4 = NM_IS_IP4_CONFIG (current->config); gint priority; - g_variant_builder_init (&entry_builder, G_VARIANT_TYPE ("a{sv}")); - g_variant_builder_init (&strv_builder, G_VARIANT_TYPE ("as")); - if (v4) { NMIP4Config *config = NM_IP4_CONFIG (current->config); guint num = nm_ip4_config_get_num_nameservers (config); @@ -1871,29 +1868,30 @@ _get_config_variant (NMDnsManager *self) if (!num) continue; + g_variant_builder_init (&entry_builder, G_VARIANT_TYPE ("a{sv}")); + /* Add nameservers */ + g_variant_builder_init (&strv_builder, G_VARIANT_TYPE ("as")); for (j = 0; j < num; j++) { ns = nm_ip4_config_get_nameserver (config, j); g_variant_builder_add (&strv_builder, "s", nm_utils_inet4_ntop (ns, NULL)); } - g_variant_builder_add (&entry_builder, "{sv}", "nameservers", g_variant_builder_end (&strv_builder)); /* Add domains */ - g_variant_builder_init (&strv_builder, G_VARIANT_TYPE ("as")); num = nm_ip4_config_get_num_domains (config); - for (j = 0; j < num; j++) { - g_variant_builder_add (&strv_builder, - "s", - nm_ip4_config_get_domain (config, j)); - } - - if (num) { + if (num > 0) { + g_variant_builder_init (&strv_builder, G_VARIANT_TYPE ("as")); + for (j = 0; j < num; j++) { + g_variant_builder_add (&strv_builder, + "s", + nm_ip4_config_get_domain (config, j)); + } g_variant_builder_add (&entry_builder, "{sv}", "domains", @@ -1909,29 +1907,30 @@ _get_config_variant (NMDnsManager *self) if (!num) continue; + g_variant_builder_init (&entry_builder, G_VARIANT_TYPE ("a{sv}")); + /* Add nameservers */ + g_variant_builder_init (&strv_builder, G_VARIANT_TYPE ("as")); for (j = 0; j < num; j++) { ns = nm_ip6_config_get_nameserver (config, j); g_variant_builder_add (&strv_builder, "s", nm_utils_inet6_ntop (ns, NULL)); } - g_variant_builder_add (&entry_builder, "{sv}", "nameservers", g_variant_builder_end (&strv_builder)); /* Add domains */ - g_variant_builder_init (&strv_builder, G_VARIANT_TYPE ("as")); num = nm_ip6_config_get_num_domains (config); - for (j = 0; j < num; j++) { - g_variant_builder_add (&strv_builder, - "s", - nm_ip6_config_get_domain (config, j)); - } - - if (num) { + if (num > 0) { + g_variant_builder_init (&strv_builder, G_VARIANT_TYPE ("as")); + for (j = 0; j < num; j++) { + g_variant_builder_add (&strv_builder, + "s", + nm_ip6_config_get_domain (config, j)); + } g_variant_builder_add (&entry_builder, "{sv}", "domains", |