fix completely bogus loop condition in getmntent_r
authorRich Felker <dalias@aerifal.cx>
Wed, 6 Apr 2011 16:35:05 +0000 (12:35 -0400)
committerRich Felker <dalias@aerifal.cx>
Wed, 6 Apr 2011 16:35:05 +0000 (12:35 -0400)
somehow this worked on my simple fstab, but horribly broke in general,
leading to use of uninitialized offset array and crashes.

src/linux/mntent.c

index 26d045c..48c85bd 100644 (file)
@@ -26,7 +26,7 @@ struct mntent *getmntent_r(FILE *f, struct mntent *mnt, char *linebuf, int bufle
                cnt = sscanf(linebuf, " %n%*s%n %n%*s%n %n%*s%n %n%*s%n %d %d",
                        n, n+1, n+2, n+3, n+4, n+5, n+6, n+7,
                        &mnt->mnt_freq, &mnt->mnt_passno);
-       } while (cnt >= 8 && linebuf[n[0]] != '#');
+       } while (cnt < 2 || linebuf[n[0]] == '#');
 
        linebuf[n[1]] = 0;
        linebuf[n[3]] = 0;