Do not permit an empty list between "while" and "do".
authormillert <millert@openbsd.org>
Mon, 5 Jul 2021 13:41:46 +0000 (13:41 +0000)
committermillert <millert@openbsd.org>
Mon, 5 Jul 2021 13:41:46 +0000 (13:41 +0000)
This avoids a cpu loop for "while do done" and is consistent with
the behavior of AT&T ksh and most other shells.  OK jca@ halex@

bin/ksh/syn.c

index 4d845d9..5de4770 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: syn.c,v 1.39 2018/04/24 08:25:16 kn Exp $     */
+/*     $OpenBSD: syn.c,v 1.40 2021/07/05 13:41:46 millert Exp $        */
 
 /*
  * shell parser (C version)
@@ -331,6 +331,8 @@ get_command(int cf)
                nesting_push(&old_nesting, c);
                t = newtp((c == WHILE) ? TWHILE : TUNTIL);
                t->left = c_list(true);
+               if (t->left == NULL)
+                       syntaxerr(NULL);
                t->right = dogroup();
                nesting_pop(&old_nesting);
                break;