[arch-commits] Commit in libbsd/trunk (PKGBUILD spt.patch)

Jan Steffens heftig at nymeria.archlinux.org
Tue Jun 18 01:21:29 UTC 2013


    Date: Tuesday, June 18, 2013 @ 03:21:28
  Author: heftig
Revision: 188689

paper over a firefox crash

Added:
  libbsd/trunk/spt.patch
Modified:
  libbsd/trunk/PKGBUILD

-----------+
 PKGBUILD  |   16 +++++++++++++---
 spt.patch |   50 ++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 63 insertions(+), 3 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2013-06-17 23:03:29 UTC (rev 188688)
+++ PKGBUILD	2013-06-18 01:21:28 UTC (rev 188689)
@@ -4,17 +4,27 @@
 
 pkgname=libbsd
 pkgver=0.5.2
-pkgrel=1
+pkgrel=2
 pkgdesc="Provides useful functions commonly found on BSD systems like strlcpy()"
 arch=('i686' 'x86_64')
 url="http://libbsd.freedesktop.org"
 license=('custom')
 depends=('glibc')
 options=('!libtool')
-source=(http://libbsd.freedesktop.org/releases/$pkgname-$pkgver.tar.xz{,.asc})
+source=(http://libbsd.freedesktop.org/releases/$pkgname-$pkgver.tar.xz{,.asc}
+        spt.patch)
 md5sums=('be8b2e0dc4614699834c49693574fd1a'
-         'SKIP')
+         'SKIP'
+         '56236fb72c8ec6cbdbd0daa5f404bccb')
 
+prepare() {
+  cd $pkgname-$pkgver
+
+  # Paper over a firefox crash
+  # http://lists.freedesktop.org/archives/libbsd/2013-June/000085.html
+  patch -Np1 -i ../spt.patch
+}
+
 build() {
   cd $pkgname-$pkgver
 

Added: spt.patch
===================================================================
--- spt.patch	                        (rev 0)
+++ spt.patch	2013-06-18 01:21:28 UTC (rev 188689)
@@ -0,0 +1,50 @@
+diff -u -r libbsd-0.5.2-orig/src/setproctitle.c libbsd-0.5.2/src/setproctitle.c
+--- libbsd-0.5.2-orig/src/setproctitle.c	2013-06-08 18:26:04.000000000 +0200
++++ libbsd-0.5.2/src/setproctitle.c	2013-06-18 02:35:59.441393418 +0200
+@@ -86,7 +86,7 @@
+ 	if (environ != envp)
+ 		return 0;
+ 
+-	/* Make a copy of the old environ array of pointers, in case
++	/* Make a deep copy of the old environ array of pointers, in case
+ 	 * clearenv() or setenv() is implemented to free the internal
+ 	 * environ array, because we will need to access the old environ
+ 	 * contents to make the new copy. */
+@@ -94,11 +94,13 @@
+ 	envcopy = malloc(envsize);
+ 	if (envcopy == NULL)
+ 		return errno;
+-	memcpy(envcopy, envp, envsize);
++	for (i = 0; envp[i]; i++) envcopy[i] = strdup(envp[i]);
++	envcopy[i] = NULL;
+ 
+ 	error = spt_clearenv();
+ 	if (error) {
+ 		environ = envp;
++		for(i = 0; envcopy[i]; i++) free(envcopy[i]);
+ 		free(envcopy);
+ 		return error;
+ 	}
+@@ -116,18 +118,20 @@
+ 		if (error) {
+ #ifdef HAVE_CLEARENV
+ 			/* Because the old environ might not be available
+-			 * anymore we will make do with the shallow copy. */
++			 * anymore we will make do with the deep copy. */
+ 			environ = envcopy;
+ #else
+ 			environ = envp;
++			for(i = 0; envcopy[i]; i++) free(envcopy[i]);
+ 			free(envcopy);
+ #endif
+ 			return error;
+ 		}
+ 	}
+ 
+-	/* Dispose of the shallow copy, now that we've finished transfering
++	/* Dispose of the deep copy, now that we've finished transfering
+ 	 * the old environment. */
++	for(i = 0; envcopy[i]; i++) free(envcopy[i]);
+ 	free(envcopy);
+ 
+ 	return 0;




More information about the arch-commits mailing list