getlogin_r() with empty buffer will always fail since the underlying
array is NULL. Reserve space before using the vector.
Signed-off-by: Nir Soffer <nsoffer(a)redhat.com>
---
 lib/crypto.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/lib/crypto.c b/lib/crypto.c
index 2ce4d4d..09d98fd 100644
--- a/lib/crypto.c
+++ b/lib/crypto.c
@@ -141,6 +141,12 @@ nbd_unlocked_get_tls_username (struct nbd_handle *h)
   }
 
   for (;;) {
+    /* Increase capacity (str.cap starts at 0) */
+    if (string_reserve (&str, 16) == -1) {
+      set_error (errno, "realloc");
+      free (str.ptr);
+      return NULL;
+    }
     if (getlogin_r (str.ptr, str.cap) == 0) {
       return str.ptr;
     }
@@ -149,12 +155,6 @@ nbd_unlocked_get_tls_username (struct nbd_handle *h)
       free (str.ptr);
       return NULL;
     }
-    /* Try again with a larger buffer. */
-    if (string_reserve (&str, 16) == -1) {
-      set_error (errno, "realloc");
-      free (str.ptr);
-      return NULL;
-    }
   }
 }
 
-- 
2.31.1