sysusers: fix memory leak when /etc/passwd contains multiple identical lines
Fixes: #8718
This commit is contained in:
@@ -97,8 +97,8 @@ static int load_user_database(void) {
|
|||||||
return r;
|
return r;
|
||||||
|
|
||||||
while ((r = fgetpwent_sane(f, &pw)) > 0) {
|
while ((r = fgetpwent_sane(f, &pw)) > 0) {
|
||||||
char *n;
|
|
||||||
int k, q;
|
int k, q;
|
||||||
|
char *n;
|
||||||
|
|
||||||
n = strdup(pw->pw_name);
|
n = strdup(pw->pw_name);
|
||||||
if (!n)
|
if (!n)
|
||||||
@@ -112,12 +112,12 @@ static int load_user_database(void) {
|
|||||||
|
|
||||||
q = hashmap_put(database_uid, UID_TO_PTR(pw->pw_uid), n);
|
q = hashmap_put(database_uid, UID_TO_PTR(pw->pw_uid), n);
|
||||||
if (q < 0 && q != -EEXIST) {
|
if (q < 0 && q != -EEXIST) {
|
||||||
if (k < 0)
|
if (k <= 0)
|
||||||
free(n);
|
free(n);
|
||||||
return q;
|
return q;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (q < 0 && k < 0)
|
if (q <= 0 && k <= 0)
|
||||||
free(n);
|
free(n);
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
@@ -159,12 +159,12 @@ static int load_group_database(void) {
|
|||||||
|
|
||||||
q = hashmap_put(database_gid, GID_TO_PTR(gr->gr_gid), n);
|
q = hashmap_put(database_gid, GID_TO_PTR(gr->gr_gid), n);
|
||||||
if (q < 0 && q != -EEXIST) {
|
if (q < 0 && q != -EEXIST) {
|
||||||
if (k < 0)
|
if (k <= 0)
|
||||||
free(n);
|
free(n);
|
||||||
return q;
|
return q;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (q < 0 && k < 0)
|
if (q <= 0 && k <= 0)
|
||||||
free(n);
|
free(n);
|
||||||
|
|
||||||
errno = 0;
|
errno = 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user