libbb: fix fallout from nth_string() robustification, closes 14726
function old new delta parse_common 187 228 +41 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
7fbfb2050f
commit
0cdd6f5792
@ -191,6 +191,9 @@ static char *parse_common(FILE *fp, struct passdb *db,
|
|||||||
char *buf;
|
char *buf;
|
||||||
|
|
||||||
while ((buf = xmalloc_fgetline(fp)) != NULL) {
|
while ((buf = xmalloc_fgetline(fp)) != NULL) {
|
||||||
|
int n;
|
||||||
|
char *field;
|
||||||
|
|
||||||
/* Skip empty lines, comment lines */
|
/* Skip empty lines, comment lines */
|
||||||
if (buf[0] == '\0' || buf[0] == '#')
|
if (buf[0] == '\0' || buf[0] == '#')
|
||||||
goto free_and_next;
|
goto free_and_next;
|
||||||
@ -204,7 +207,16 @@ static char *parse_common(FILE *fp, struct passdb *db,
|
|||||||
/* no key specified: sequential read, return a record */
|
/* no key specified: sequential read, return a record */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (strcmp(key, nth_string(buf, field_pos)) == 0) {
|
/* Can't use nth_string() here, it does not allow empty strings
|
||||||
|
* ("\0\0" terminates the list), and a valid passwd entry
|
||||||
|
* "user::UID:GID..." would be mishandled */
|
||||||
|
n = field_pos;
|
||||||
|
field = buf;
|
||||||
|
while (n) {
|
||||||
|
n--;
|
||||||
|
field += strlen(field) + 1;
|
||||||
|
}
|
||||||
|
if (strcmp(key, field) == 0) {
|
||||||
/* record found */
|
/* record found */
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user