Applied, thanks!
On Mon, Jan 5, 2015 at 11:03 PM, tito <[email protected]> wrote: > On Monday 05 January 2015 15:11:14 you wrote: >> On Mon, Jan 5, 2015 at 12:14 AM, tito <[email protected]> wrote: >> > 1) in function parse_common count should start at 1 as line numbers are >> > off by one. >> > >> > static char *parse_common(FILE *fp, struct passdb *db, >> > const char *key, int field_pos) >> > { >> > - int count = 0; >> > + int count = 1; >> > char *buf; >> > >> > while ((buf = xmalloc_fgetline(fp)) != NULL) { >> >> There is a count++ immediately after we got a line: >> >> int count = 0; >> char *buf; >> while ((buf = xmalloc_fgetline(fp)) != NULL) { >> count++; >> >> > 2) in parse_common the use of key variable seems problematic to me: >> > >> > if (!key) { >> > /* no key specified: sequential read, return a >> > record */ >> > break; >> > } >> > >> > This variable string is passed on from the caller and eventually from the >> > user >> > we have no guarantee that it will be non NULL when we don't want a >> > sequential read. >> > If the calling app passes a bad pointer it will get a record returned. >> >> I think that getpwnam(NULL) is not a valid use, but ok, >> we can plug this hole anyway. Switching to field_pos == -1 >> as "no search" indicator. >> >> >> > 3) in parse_common function >> > >> > while ((buf = xmalloc_fgetline(fp)) != NULL) { >> > >> > does not set errno to ENOENT on EOF >> >> How about this simple fix in getXXent_r()? - >> >> buf = parse_common(db->fp, db, /*no search key:*/ NULL, 0); >> + if (!buf && !errno) >> + errno = ENOENT; >> return massage_data_for_r_func(db, buffer, buflen, result, buf); >> >> >> Thanks! >> >> > > Hi, > your fixes work great! > Attached you will find a patch to fix a minor problem: > > remove line count from parse_common because in case of a sequential > read the reported bad line is always line 1. (eventually we could print > the line but for now we just warn) > > Ciao, > Tito > > --- libpwdgrp/pwd_grp.c.original 2015-01-05 21:22:51.000000000 +0100 > +++ libpwdgrp/pwd_grp.c 2015-01-05 22:50:52.851719946 +0100 > @@ -189,17 +189,15 @@ static int tokenize(char *buffer, int ch > static char *parse_common(FILE *fp, struct passdb *db, > const char *key, int field_pos) > { > - int count = 0; > char *buf; > > while ((buf = xmalloc_fgetline(fp)) != NULL) { > - count++; > /* Skip empty lines, comment lines */ > if (buf[0] == '\0' || buf[0] == '#') > goto free_and_next; > if (tokenize(buf, ':') != db->numfields) { > /* number of fields is wrong */ > - bb_error_msg("bad record at %s:%u", db->filename, > count); > + bb_error_msg("%s: bad record", db->filename); > goto free_and_next; > } > > > > > > _______________________________________________ > busybox mailing list > [email protected] > http://lists.busybox.net/mailman/listinfo/busybox _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
