From: Matthias Guedemann <matthias.guedemann@ovgu.de>
Date: Wed, 25 May 2011 12:27:55 +0000 (+0200)
Subject: Fix check of sysconf return in get_name/username_from_passwd_file
X-Git-Tag: debian/0.6_254~107
X-Git-Url: https://git.cworth.org/git?a=commitdiff_plain;h=3185df17eb6c7621df3945841af58f2b19facc40;p=notmuch-old

Fix check of sysconf return in get_name/username_from_passwd_file

Fix to check the value returned by sysconf(_SC_GETPW_R_SIZE_MAX)
before using the value.

This fixes a core dump on DragonFlyBSD where this function returns -1.
---

diff --git a/notmuch-config.c b/notmuch-config.c
index d86c0424..6e4c5c4c 100644
--- a/notmuch-config.c
+++ b/notmuch-config.c
@@ -109,13 +109,15 @@ notmuch_config_destructor (notmuch_config_t *config)
 static char *
 get_name_from_passwd_file (void *ctx)
 {
-    long pw_buf_size = sysconf(_SC_GETPW_R_SIZE_MAX);
-    char *pw_buf = talloc_zero_size (ctx, pw_buf_size);
+    long pw_buf_size;
+    char *pw_buf;
     struct passwd passwd, *ignored;
     char *name;
     int e;
 
+    pw_buf_size = sysconf(_SC_GETPW_R_SIZE_MAX);
     if (pw_buf_size == -1) pw_buf_size = 64;
+    pw_buf = talloc_size (ctx, pw_buf_size);
 
     while ((e = getpwuid_r (getuid (), &passwd, pw_buf,
                             pw_buf_size, &ignored)) == ERANGE) {
@@ -142,13 +144,16 @@ get_name_from_passwd_file (void *ctx)
 static char *
 get_username_from_passwd_file (void *ctx)
 {
-    long pw_buf_size = sysconf(_SC_GETPW_R_SIZE_MAX);
-    char *pw_buf = talloc_zero_size (ctx, pw_buf_size);
+    long pw_buf_size;
+    char *pw_buf;
     struct passwd passwd, *ignored;
     char *name;
     int e;
 
+    pw_buf_size = sysconf(_SC_GETPW_R_SIZE_MAX);
     if (pw_buf_size == -1) pw_buf_size = 64;
+    pw_buf = talloc_zero_size (ctx, pw_buf_size);
+
     while ((e = getpwuid_r (getuid (), &passwd, pw_buf,
                             pw_buf_size, &ignored)) == ERANGE) {
         pw_buf_size = pw_buf_size * 2;