]> granicus.if.org Git - sudo/commitdiff
Treat EOF w/o newline as an error.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Sat, 8 Nov 2008 15:30:42 +0000 (15:30 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Sat, 8 Nov 2008 15:30:42 +0000 (15:30 +0000)
tgetpass.c

index 119114867f08841277c268dd5930518ae1e44d4d..d0e3d840f2cde0ff402b60c5ee1635e7878f6024 100644 (file)
@@ -282,20 +282,24 @@ getln(fd, buf, bufsiz)
     char *buf;
     size_t bufsiz;
 {
-    char c, *cp;
-    ssize_t nr;
+    ssize_t nr = -1;
+    char *cp = buf;
+    char c = '\0';
 
     if (bufsiz == 0) {
        errno = EINVAL;
        return(NULL);                   /* sanity */
     }
 
-    cp = buf;
-    nr = -1;
-    while (--bufsiz && (nr = read(fd, &c, 1)) == 1 && c != '\n' && c != '\r')
+    while (--bufsiz) {
+       nr = read(fd, &c, 1);
+       if (nr != 1 || c == '\n' || c == '\r')
+           break;
        *cp++ = c;
+    }
     *cp = '\0';
-    return(nr == -1 ? NULL : buf);
+
+    return(nr == 1 ? buf : NULL);
 }
 
 static void