fix infinite loop bug in yankword()
authorSerge ??? <serge@ucbvax.Berkeley.EDU>
Sun, 10 Nov 1985 17:19:04 +0000 (09:19 -0800)
committerSerge ??? <serge@ucbvax.Berkeley.EDU>
Sun, 10 Nov 1985 17:19:04 +0000 (09:19 -0800)
SCCS-vsn: usr.bin/mail/names.c 5.3

usr/src/usr.bin/mail/names.c

index 983a185..9613701 100644 (file)
@@ -5,7 +5,7 @@
  */
 
 #ifndef lint
  */
 
 #ifndef lint
-static char *sccsid = "@(#)names.c     5.2 (Berkeley) %G%";
+static char *sccsid = "@(#)names.c     5.3 (Berkeley) %G%";
 #endif not lint
 
 /*
 #endif not lint
 
 /*
@@ -156,14 +156,25 @@ yankword(ap, wbuf)
 {
        register char *cp, *cp2;
 
 {
        register char *cp, *cp2;
 
+       cp = ap;
        do {
        do {
-               for (cp = ap; *cp && any(*cp, " \t,"); cp++)
-                       ;
+               while (*cp && any(*cp, " \t,"))
+                       cp++;
                if (*cp == '(') {
                if (*cp == '(') {
-                       while (*cp && *cp != ')')
-                               cp++;
-                       if (*cp)
-                               cp++;
+                       register int nesting = 0;
+
+                       while (*cp != '\0') {
+                               switch (*cp++) {
+                               case '(':
+                                       nesting++;
+                                       break;
+                               case ')':
+                                       --nesting;
+                                       break;
+                               }
+                               if (nesting <= 0)
+                                       break;
+                       }
                }
                if (*cp == '\0')
                        return(NOSTR);
                }
                if (*cp == '\0')
                        return(NOSTR);