[arch-commits] Commit in modem-manager-gui/trunk (PKGBUILD fix-crash.patch)

Balló György bgyorgy at archlinux.org
Fri Mar 29 11:07:53 UTC 2019


    Date: Friday, March 29, 2019 @ 11:07:52
  Author: bgyorgy
Revision: 445984

upgpkg: modem-manager-gui 0.0.19.1-3

Fix crash (FS#61622, FS#61823)

Added:
  modem-manager-gui/trunk/fix-crash.patch
Modified:
  modem-manager-gui/trunk/PKGBUILD

-----------------+
 PKGBUILD        |    8 ++++
 fix-crash.patch |   88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 95 insertions(+), 1 deletion(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2019-03-29 11:02:45 UTC (rev 445983)
+++ PKGBUILD	2019-03-29 11:07:52 UTC (rev 445984)
@@ -3,7 +3,7 @@
 
 pkgname=modem-manager-gui
 pkgver=0.0.19.1
-pkgrel=2
+pkgrel=3
 pkgdesc="Frontend for ModemManager daemon able to control specific modem functions"
 arch=('x86_64')
 url="https://linuxonly.ru/page/modem-manager-gui"
@@ -13,12 +13,18 @@
 optdepends=('networkmanager: monitor network traffic')
 options=(!emptydirs)
 source=("https://download.tuxfamily.org/gsf/source/$pkgname-$pkgver.tar.gz"
+        fix-crash.patch
         no-indicator.patch)
 sha256sums=('0b9bae29f3cd3d99b3a61d5530097d576a5fa67d3215d54f3570cb20c6ca0bc2'
+            'b690023687614a04206ddecd684224350b75e70599e693703e777dab3412e655'
             '04f85c3d6e7dbf89f5767446a1884f1f45aaea4023a8d07981b819be181849b3')
 
 prepare() {
   cd $pkgname-$pkgver
+
+  # Fix memory corruption because of wrong strsep() usage (FS#61622, FS#61823)
+  patch -Np1 -i ../fix-crash.patch
+
   # Revert to GTK+ status icon
   patch -Np1 -i ../no-indicator.patch
 }

Added: fix-crash.patch
===================================================================
--- fix-crash.patch	                        (rev 0)
+++ fix-crash.patch	2019-03-29 11:07:52 UTC (rev 445984)
@@ -0,0 +1,88 @@
+# HG changeset patch
+# User Alex <alex at linuxonly.ru>
+# Date 1550936745 -10800
+# Node ID 6710bf86869852bb8a9946b628eff5bc1019b5aa
+# Parent  e8a146d4d2ea8525301670fb48b1accfdde13ac9
+Fix memory corruption because of wrong strsep() usage (Thanks to Persmule)
+
+diff --git a/src/modules/mm06.c b/src/modules/mm06.c
+--- a/src/modules/mm06.c
++++ b/src/modules/mm06.c
+@@ -1552,10 +1552,12 @@
+ 	GVariantIter *iter;
+ 	guint32 locationtype;
+ 	GVariant *locationdata;
+-	gchar *locationstring;
+ 	gsize strlength;
++	gchar **fragments;
++	gint i;
+ 	GError *error;
+-			
++	const gint numbases[4] = {10, 10, 16, 16};
++	
+ 	if ((mmguicore == NULL) || (device == NULL)) return FALSE;
+ 	mmguicorelc = (mmguicore_t)mmguicore;
+ 	
+@@ -1578,14 +1580,17 @@
+ 		g_variant_get(data, "(a{uv})", &iter);
+ 		while (g_variant_iter_next(iter, "{uv}", &locationtype, &locationdata)) {
+ 			if ((locationtype == MODULE_INT_MODEM_LOCATION_CAPABILITY_GSM_LAC_CI) && (locationdata != NULL)) {
+-				//3GPP location
++				/*3GPP location*/
+ 				strlength = 256;
+-				locationstring = g_strdup(g_variant_get_string(locationdata, &strlength));
+-				device->loc3gppdata[0] = (guint)strtol(strsep(&locationstring, ","), NULL, 10);
+-				device->loc3gppdata[1] = (guint)strtol(strsep(&locationstring, ","), NULL, 10);
+-				device->loc3gppdata[2] = (guint)strtol(strsep(&locationstring, ","), NULL, 16);
+-				device->loc3gppdata[3] = (guint)strtol(strsep(&locationstring, ","), NULL, 16);
+-				g_free(locationstring);
++				fragments = g_strsplit(g_variant_get_string(locationdata, &strlength), ",", 4);
++				if (fragments != NULL) {
++					i = 0;
++					while ((fragments[i] != NULL) && (i < 4)) {
++						device->loc3gppdata[i] = (guint)strtoul(fragments[i], NULL, numbases[i]);
++						i++;
++					}
++					g_strfreev(fragments);
++				}
+ 				g_variant_unref(locationdata);
+ 				g_debug("3GPP location: %u, %u, %4x, %4x", device->loc3gppdata[0], device->loc3gppdata[1], device->loc3gppdata[2], device->loc3gppdata[3]);
+ 			}
+diff --git a/src/modules/mm07.c b/src/modules/mm07.c
+--- a/src/modules/mm07.c
++++ b/src/modules/mm07.c
+@@ -1659,8 +1659,11 @@
+ 	GVariant *locationdata;
+ 	gchar *locationstring;
+ 	gsize strlength;
++	gchar **fragments;
++	gint i;
+ 	GError *error;
+-			
++	const gint numbases[4] = {10, 10, 16, 16};
++	
+ 	if ((mmguicore == NULL) || (device == NULL)) return FALSE;
+ 	mmguicorelc = (mmguicore_t)mmguicore;
+ 	
+@@ -1684,12 +1687,15 @@
+ 			if ((locationtype == MODULE_INT_MODEM_LOCATION_SOURCE_3GPP_LAC_CI) && (locationdata != NULL)) {
+ 				/*3GPP location*/
+ 				strlength = 256;
+-				locationstring = g_strdup(g_variant_get_string(locationdata, &strlength));
+-				device->loc3gppdata[0] = (guint)strtol(strsep(&locationstring, ","), NULL, 10);
+-				device->loc3gppdata[1] = (guint)strtol(strsep(&locationstring, ","), NULL, 10);
+-				device->loc3gppdata[2] = (guint)strtol(strsep(&locationstring, ","), NULL, 16);
+-				device->loc3gppdata[3] = (guint)strtol(strsep(&locationstring, ","), NULL, 16);
+-				g_free(locationstring);
++				fragments = g_strsplit(g_variant_get_string(locationdata, &strlength), ",", 4);
++				if (fragments != NULL) {
++					i = 0;
++					while ((fragments[i] != NULL) && (i < 4)) {
++						device->loc3gppdata[i] = (guint)strtoul(fragments[i], NULL, numbases[i]);
++						i++;
++					}
++					g_strfreev(fragments);
++				}
+ 				g_variant_unref(locationdata);
+ 				g_debug("3GPP location: %u, %u, %4x, %4x\n", device->loc3gppdata[0], device->loc3gppdata[1], device->loc3gppdata[2], device->loc3gppdata[3]);
+ 			} else if ((locationtype == MODULE_INT_MODEM_LOCATION_SOURCE_GPS_RAW) && (locationdata != NULL)) {



More information about the arch-commits mailing list