sysusers: fix memory leak when /etc/passwd contains multiple identical lines
authorLennart Poettering <lennart@poettering.net>
Wed, 18 Apr 2018 15:58:53 +0000 (17:58 +0200)
committerLennart Poettering <lennart@poettering.net>
Wed, 18 Apr 2018 16:00:05 +0000 (18:00 +0200)
Fixes: #8718

src/sysusers/sysusers.c

index b3c0546..a0d9f45 100644 (file)
@@ -97,8 +97,8 @@ static int load_user_database(void) {
                 return r;
 
         while ((r = fgetpwent_sane(f, &pw)) > 0) {
-                char *n;
                 int k, q;
+                char *n;
 
                 n = strdup(pw->pw_name);
                 if (!n)
@@ -112,12 +112,12 @@ static int load_user_database(void) {
 
                 q = hashmap_put(database_uid, UID_TO_PTR(pw->pw_uid), n);
                 if (q < 0 && q != -EEXIST) {
-                        if (k < 0)
+                        if (k <= 0)
                                 free(n);
                         return q;
                 }
 
-                if (q < 0 && k < 0)
+                if (q <= 0 && k <= 0)
                         free(n);
         }
         return r;
@@ -159,12 +159,12 @@ static int load_group_database(void) {
 
                 q = hashmap_put(database_gid, GID_TO_PTR(gr->gr_gid), n);
                 if (q < 0 && q != -EEXIST) {
-                        if (k < 0)
+                        if (k <= 0)
                                 free(n);
                         return q;
                 }
 
-                if (q < 0 && k < 0)
+                if (q <= 0 && k <= 0)
                         free(n);
 
                 errno = 0;