Avoid a crash if id-0 doesn't exist.
authorWayne Davison <wayne@opencoder.net>
Mon, 13 Jul 2020 20:18:38 +0000 (13:18 -0700)
committerWayne Davison <wayne@opencoder.net>
Mon, 13 Jul 2020 20:18:38 +0000 (13:18 -0700)
uidlist.c

index 975636a84ab7de77d7b062018463cb95b7c6ff23..6e9bb3c1388eda13f240bcefe54e656e42ccca00 100644 (file)
--- a/uidlist.c
+++ b/uidlist.c
@@ -325,13 +325,17 @@ const char *add_gid(gid_t gid)
 
 static void send_one_name(int f, id_t id, const char *name)
 {
-       int len = strlen(name);
-       if (len > 255) /* Impossible? */
+       int len;
+
+       if (!name)
+               name = "";
+       if ((len = strlen(name)) > 255) /* Impossible? */
                len = 255;
 
        write_varint30(f, id);
        write_byte(f, len);
-       write_buf(f, name, len);
+       if (len)
+               write_buf(f, name, len);
 }
 
 static void send_one_list(int f, struct idlist *idlist, int usernames)
@@ -366,12 +370,18 @@ uid_t recv_user_name(int f, uid_t uid)
 {
        struct idlist *node;
        int len = read_byte(f);
-       char *name = new_array(char, len+1);
-       read_sbuf(f, name, len);
-       if (numeric_ids < 0) {
-               free(name);
+       char *name;
+
+       if (len) {
+               name = new_array(char, len+1);
+               read_sbuf(f, name, len);
+               if (numeric_ids < 0) {
+                       free(name);
+                       name = NULL;
+               }
+       } else
                name = NULL;
-       }
+
        node = recv_add_id(&uidlist, uidmap, uid, name); /* node keeps name's memory */
        return node->id2;
 }