summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2017-01-04 12:45:03 +0100
committerThomas Haller <thaller@redhat.com>2017-01-04 14:05:22 +0100
commit674f5f24af90fe746e2f0465e7ade8b394d84d73 (patch)
treead69f27a403cba9f837bba24183a5620925545f2
parent44ab504cf77963f0d246bdf695b9a2d5ec0b1603 (diff)
downloadNetworkManager-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.c41
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",