don't choke on long multiline responses, eg help messages
authorMike Karels <karels@ucbvax.Berkeley.EDU>
Fri, 24 Mar 1989 09:49:15 +0000 (01:49 -0800)
committerMike Karels <karels@ucbvax.Berkeley.EDU>
Fri, 24 Mar 1989 09:49:15 +0000 (01:49 -0800)
SCCS-vsn: usr.bin/ftp/ftp.c 5.27

usr/src/usr.bin/ftp/ftp.c

index ab7bc6f..4b38c26 100644 (file)
@@ -16,7 +16,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char sccsid[] = "@(#)ftp.c      5.26 (Berkeley) %G%";
+static char sccsid[] = "@(#)ftp.c      5.27 (Berkeley) %G%";
 #endif /* not lint */
 
 #include <sys/param.h>
 #endif /* not lint */
 
 #include <sys/param.h>
@@ -256,7 +256,7 @@ command(fmt, args)
        return(r);
 }
 
        return(r);
 }
 
-char reply_string[BUFSIZ];
+char reply_string[BUFSIZ];             /* last line of previous reply */
 
 #include <ctype.h>
 
 
 #include <ctype.h>
 
@@ -270,10 +270,10 @@ getreply(expecteof)
        int pflag = 0;
        char *pt = pasv;
 
        int pflag = 0;
        char *pt = pasv;
 
-       cp = reply_string;
        oldintr = signal(SIGINT,cmdabort);
        for (;;) {
                dig = n = code = 0;
        oldintr = signal(SIGINT,cmdabort);
        for (;;) {
                dig = n = code = 0;
+               cp = reply_string;
                while ((c = getc(cin)) != '\n') {
                        if (c == IAC) {     /* handle telnet commands */
                                switch (c = getc(cin)) {
                while ((c = getc(cin)) != '\n') {
                        if (c == IAC) {     /* handle telnet commands */
                                switch (c = getc(cin)) {
@@ -337,7 +337,8 @@ getreply(expecteof)
                        }
                        if (n == 0)
                                n = c;
                        }
                        if (n == 0)
                                n = c;
-                       *cp++ = c;
+                       if (cp < &reply_string[sizeof(reply_string) - 1])
+                               *cp++ = c;
                }
                if (verbose > 0 || verbose > -1 && n == '5') {
                        (void) putchar(c);
                }
                if (verbose > 0 || verbose > -1 && n == '5') {
                        (void) putchar(c);