Fix check of sysconf return in get_name/username_from_passwd_file
authorMatthias Guedemann <matthias.guedemann@ovgu.de>
Wed, 25 May 2011 12:27:55 +0000 (14:27 +0200)
committerCarl Worth <cworth@cworth.org>
Thu, 26 May 2011 22:13:46 +0000 (15:13 -0700)
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.

notmuch-config.c

index d86c0424a4920bcd712c5d72f8822ef4e195a133..6e4c5c4c0c93738f643b4048152c0d2de826a5f4 100644 (file)
@@ -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;