On Tue, Aug 14, 2018 at 03:11:47PM -0500, Scott Cheloha wrote:
> This patch is ok cheloha@ and I can commit if someone else
> is ok, too.

1 week bump.  Anyone else ok?

> On Tue, Aug 14, 2018 at 10:47:07PM +0300, Lauri Tirkkonen wrote:
> > [...]
> > 
> > diff --git a/bin/md5/md5.c b/bin/md5/md5.c
> > index 84adbcf0989..1abf28cfa16 100644
> > --- a/bin/md5/md5.c
> > +++ b/bin/md5/md5.c
> > @@ -549,11 +549,11 @@ digest_filelist(const char *file, struct 
> > hash_function *defhash, int selcount,
> >     int found, base64, error, cmp, i;
> >     size_t algorithm_max, algorithm_min;
> >     const char *algorithm;
> > -   char *filename, *checksum, *buf, *p;
> > +   char *filename, *checksum, *line, *p, *tmpline;
> >     char digest[MAX_DIGEST_LEN + 1];
> > -   char *lbuf = NULL;
> > +   ssize_t linelen;
> >     FILE *listfp, *fp;
> > -   size_t len, nread;
> > +   size_t len, linesize, nread;
> >     int *sel_found = NULL;
> >     u_char data[32 * 1024];
> >     union ANY_CTX context;
> > @@ -580,20 +580,15 @@ digest_filelist(const char *file, struct 
> > hash_function *defhash, int selcount,
> >     }
> >  
> >     error = found = 0;
> > -   while ((buf = fgetln(listfp, &len))) {
> > +   line = NULL;
> > +   linesize = 0;
> > +   while ((linelen = getline(&line, &linesize, listfp)) != -1) {
> > +           tmpline = line;
> >             base64 = 0;
> > -           if (buf[len - 1] == '\n')
> > -                   buf[len - 1] = '\0';
> > -           else {
> > -                   if ((lbuf = malloc(len + 1)) == NULL)
> > -                           err(1, NULL);
> > -
> > -                   (void)memcpy(lbuf, buf, len);
> > -                   lbuf[len] = '\0';
> > -                   buf = lbuf;
> > -           }
> > -           while (isspace((unsigned char)*buf))
> > -                   buf++;
> > +           if (line[linelen - 1] == '\n')
> > +                   line[linelen - 1] = '\0';
> > +           while (isspace((unsigned char)*tmpline))
> > +                   tmpline++;
> >  
> >             /*
> >              * Crack the line into an algorithm, filename, and checksum.
> > @@ -603,11 +598,11 @@ digest_filelist(const char *file, struct 
> > hash_function *defhash, int selcount,
> >              * Fallback on GNU form:
> >              *  CHECKSUM  FILENAME
> >              */
> > -           p = strchr(buf, ' ');
> > +           p = strchr(tmpline, ' ');
> >             if (p != NULL && *(p + 1) == '(') {
> >                     /* BSD form */
> >                     *p = '\0';
> > -                   algorithm = buf;
> > +                   algorithm = tmpline;
> >                     len = strlen(algorithm);
> >                     if (len > algorithm_max || len < algorithm_min)
> >                             continue;
> > @@ -658,7 +653,7 @@ digest_filelist(const char *file, struct hash_function 
> > *defhash, int selcount,
> >                     if ((hf = defhash) == NULL)
> >                             continue;
> >                     algorithm = hf->name;
> > -                   checksum = buf;
> > +                   checksum = tmpline;
> >                     if ((p = strchr(checksum, ' ')) == NULL)
> >                             continue;
> >                     if (hf->style == STYLE_CKSUM) {
> > @@ -725,11 +720,15 @@ digest_filelist(const char *file, struct 
> > hash_function *defhash, int selcount,
> >                     error = 1;
> >             }
> >     }
> > +   free(line);
> > +   if (ferror(listfp)) {
> > +           warn("%s: getline", file);
> > +           error = 1;
> > +   }
> >     if (listfp != stdin)
> >             fclose(listfp);
> >     if (!found)
> >             warnx("%s: no properly formatted checksum lines found", file);
> > -   free(lbuf);
> >     if (sel_found != NULL) {
> >             /*
> >              * Mark found files by setting them to NULL so that we can
> > 
> > -- 
> > Lauri Tirkkonen | lotheac @ IRCnet

Reply via email to