svn commit: r208656 - in head: bin/sh tools/regression/bin/sh/parser

Jilles Tjoelker jilles at FreeBSD.org
Sun May 30 14:20:32 UTC 2010


Author: jilles
Date: Sun May 30 14:20:32 2010
New Revision: 208656
URL: http://svn.freebsd.org/changeset/base/208656

Log:
  sh: Fix a crash if a heredoc was not properly ended and parsing continued.
  
  Example (in interactive mode):
    cat <<EOF && )
  The next command typed caused sh to segfault, because the state for the here
  document was not reset.
  
  Like parser_temp, this uses the fact that the parser is not re-entered.

Added:
  head/tools/regression/bin/sh/parser/heredoc6.0   (contents, props changed)
Modified:
  head/bin/sh/parser.c

Modified: head/bin/sh/parser.c
==============================================================================
--- head/bin/sh/parser.c	Sun May 30 14:11:27 2010	(r208655)
+++ head/bin/sh/parser.c	Sun May 30 14:20:32 2010	(r208656)
@@ -203,6 +203,7 @@ parsecmd(int interact)
 	 * which could happen if we add command substitution on PS1/PS2.
 	 */
 	parser_temp_free_all();
+	heredoclist = NULL;
 
 	tokpushback = 0;
 	doprompt = interact;

Added: head/tools/regression/bin/sh/parser/heredoc6.0
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tools/regression/bin/sh/parser/heredoc6.0	Sun May 30 14:20:32 2010	(r208656)
@@ -0,0 +1,5 @@
+# $FreeBSD$
+
+r=
+! command eval ": <<EOF; )" 2>/dev/null; command eval : hi \${r:=0}
+exit ${r:-3}


More information about the svn-src-head mailing list