Updated diff that also requires a non-empty command list for "for"
loops and adjusts the NOTES file to match.
- todd
Index: bin/ksh/NOTES
===================================================================
RCS file: /cvs/src/bin/ksh/NOTES,v
retrieving revision 1.16
diff -u -p -u -r1.16 NOTES
--- bin/ksh/NOTES 12 Jan 2018 14:20:57 -0000 1.16
+++ bin/ksh/NOTES 2 Jul 2021 18:45:11 -0000
@@ -195,10 +195,6 @@ Known differences between pdksh & at&t k
- co-processes: if ksh93, the write portion of the co-process output is
closed when the most recently started co-process exits. pdksh closes
it when all the co-processes using it have exited.
- - pdksh accepts empty command lists for while and for statements, while
- at&t ksh (and sh) don't. Eg., pdksh likes
- while false ; do done
- but ksh88 doesn't like it.
- pdksh bumps RANDOM in parent after a fork, at&t ksh bumps it in both
parent and child:
RANDOM=1
Index: bin/ksh/syn.c
===================================================================
RCS file: /cvs/src/bin/ksh/syn.c,v
retrieving revision 1.39
diff -u -p -u -r1.39 syn.c
--- bin/ksh/syn.c 24 Apr 2018 08:25:16 -0000 1.39
+++ bin/ksh/syn.c 2 Jul 2021 18:44:39 -0000
@@ -323,6 +323,8 @@ get_command(int cf)
nesting_push(&old_nesting, c);
t->vars = wordlist();
t->left = dogroup();
+ if (t->left == NULL)
+ syntaxerr(NULL);
nesting_pop(&old_nesting);
break;
@@ -331,7 +333,11 @@ 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();
+ if (t->right == NULL)
+ syntaxerr(NULL);
nesting_pop(&old_nesting);
break;