[arch-commits] Commit in network-manager-applet/trunk (2 files)

Jan Steffens heftig at archlinux.org
Thu Dec 21 17:41:32 UTC 2017


    Date: Thursday, December 21, 2017 @ 17:41:31
  Author: heftig
Revision: 313492

1.8.10-3

Modified:
  network-manager-applet/trunk/0001-shared-compat-Fix-memory-handling-of-nm_setting_vpn_.patch
  network-manager-applet/trunk/PKGBUILD

-----------------------------------------------------------------+
 0001-shared-compat-Fix-memory-handling-of-nm_setting_vpn_.patch |   63 +++++-----
 PKGBUILD                                                        |    4 
 2 files changed, 36 insertions(+), 31 deletions(-)

Modified: 0001-shared-compat-Fix-memory-handling-of-nm_setting_vpn_.patch
===================================================================
--- 0001-shared-compat-Fix-memory-handling-of-nm_setting_vpn_.patch	2017-12-21 17:39:49 UTC (rev 313491)
+++ 0001-shared-compat-Fix-memory-handling-of-nm_setting_vpn_.patch	2017-12-21 17:41:31 UTC (rev 313492)
@@ -1,37 +1,35 @@
-From 6c546a4fe86f3066545b7a8bb2900c19a66f9a2f Mon Sep 17 00:00:00 2001
-Message-Id: <6c546a4fe86f3066545b7a8bb2900c19a66f9a2f.1513772933.git.jan.steffens at gmail.com>
+From 8147a06b45ef4fc6983454b63fe81a460f761593 Mon Sep 17 00:00:00 2001
+Message-Id: <8147a06b45ef4fc6983454b63fe81a460f761593.1513877605.git.jan.steffens at gmail.com>
 From: "Jan Alexander Steffens (heftig)" <jan.steffens at gmail.com>
-Date: Wed, 20 Dec 2017 13:23:12 +0100
-Subject: [PATCH] shared/compat: Fix memory handling of
- nm_setting_vpn_get_*_keys
+Date: Thu, 21 Dec 2017 18:22:55 +0100
+Subject: [PATCH] shared/compat: fix memory handling of
+ nm_setting_vpn_get_*_keys (v2)
 
 The compat implementations return a (transfer none) strv instead of a
 (transfer container) one. This has caused double frees in nm-applet:
 https://bugs.archlinux.org/task/56772
 
-Don't copy the keys and don't free the container later.
+We still need to copy the keys because nm_setting_vpn_foreach_* provides
+us with copies that are freed after the iteration.
+
+Fix this by handing out a duplicate of the array. Also simplify the
+function a bit by caching the entire GPtrArray object and not just the
+array itself.
+
+Fixes: 272439cb2077a889485dd195bb6b99ca91d3e3bf
 ---
- shared/nm-utils/nm-compat.c | 10 +---------
- 1 file changed, 1 insertion(+), 9 deletions(-)
+ shared/nm-utils/nm-compat.c | 10 ++++------
+ 1 file changed, 4 insertions(+), 6 deletions(-)
 
 diff --git a/shared/nm-utils/nm-compat.c b/shared/nm-utils/nm-compat.c
-index 22ab675de8373639..22c31489dd222cd3 100644
+index 22ab675de8373639..2b747c700478a205 100644
 --- a/shared/nm-utils/nm-compat.c
 +++ b/shared/nm-utils/nm-compat.c
-@@ -30,39 +30,31 @@ _get_keys_cb (const char *key, const char *val, gpointer user_data)
- {
- 	GPtrArray *a = user_data;
- 
--	g_ptr_array_add (a, g_strdup (key));
-+	g_ptr_array_add (a, key);
- }
- 
- static const char **
- _get_keys (NMSettingVpn *setting,
+@@ -38,34 +38,32 @@ _get_keys (NMSettingVpn *setting,
             gboolean is_secrets,
             guint *out_length)
  {
- 	guint len;
+-	guint len;
  	const char **keys = NULL;
  	gs_unref_ptrarray GPtrArray *a = NULL;
  
@@ -42,23 +40,30 @@
  		nm_setting_vpn_foreach_secret (setting, _get_keys_cb, a);
  	else
  		nm_setting_vpn_foreach_data_item (setting, _get_keys_cb, a);
- 	len = a->len;
+-	len = a->len;
  
  	if (a->len) {
  		g_ptr_array_sort (a, nm_strcmp_p);
  		g_ptr_array_add (a, NULL);
- 		keys = (const char **) g_ptr_array_free (g_steal_pointer (&a), FALSE);
--
--		/* we need to cache the keys *somewhere*. */
--		g_object_set_qdata_full (G_OBJECT (setting),
--		                         is_secrets
--		                         ? NM_CACHED_QUARK ("libnm._nm_setting_vpn_get_secret_keys")
--		                         : NM_CACHED_QUARK ("libnm._nm_setting_vpn_get_data_keys"),
+-		keys = (const char **) g_ptr_array_free (g_steal_pointer (&a), FALSE);
++		keys = g_memdup (a->pdata, sizeof (gpointer) * a->len);
+ 
+ 		/* we need to cache the keys *somewhere*. */
+ 		g_object_set_qdata_full (G_OBJECT (setting),
+ 		                         is_secrets
+ 		                         ? NM_CACHED_QUARK ("libnm._nm_setting_vpn_get_secret_keys")
+ 		                         : NM_CACHED_QUARK ("libnm._nm_setting_vpn_get_data_keys"),
 -		                         keys,
 -		                         (GDestroyNotify) g_strfreev);
++		                         g_ptr_array_ref (a),
++		                         (GDestroyNotify) g_ptr_array_unref);
  	}
  
- 	NM_SET_OUT (out_length, len);
+-	NM_SET_OUT (out_length, len);
++	NM_SET_OUT (out_length, a->len);
+ 	return keys;
+ }
+ 
 -- 
 2.15.1
 

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2017-12-21 17:39:49 UTC (rev 313491)
+++ PKGBUILD	2017-12-21 17:41:31 UTC (rev 313492)
@@ -11,7 +11,7 @@
 pkgdesc="Applet for managing network connections"
 url="https://wiki.gnome.org/Projects/NetworkManager/"
 pkgver=1.8.10
-pkgrel=2
+pkgrel=3
 arch=(x86_64)
 license=(GPL2 LGPL2.1)
 depends=(libnm-glib libgudev gtk3 mobile-broadband-provider-info iso-codes gcr)
@@ -21,7 +21,7 @@
 source=("git+https://git.gnome.org/browse/network-manager-applet#commit=$_commit"
         0001-shared-compat-Fix-memory-handling-of-nm_setting_vpn_.patch)
 sha256sums=('SKIP'
-            '117e7fab1a930f64bd8ce4c94de2f954a28315b2763bd4c8e1c583b32bd6feaf')
+            'df8f420b116155e7fd81e9d7a13e27bc3026e63cb859a0bb533b0bc74b8c614c')
 
 pkgver() {
   cd $pkgbase



More information about the arch-commits mailing list