svn commit: r197691 - in head: bin/sh tools/regression/bin/sh/errors

Jilles Tjoelker jilles at FreeBSD.org
Thu Oct 1 21:40:08 UTC 2009


Author: jilles
Date: Thu Oct  1 21:40:08 2009
New Revision: 197691
URL: http://svn.freebsd.org/changeset/base/197691

Log:
  sh: Disallow mismatched quotes in backticks (`...`).
  
  Due to the amount of code removed by this, it seems that allowing unmatched
  quotes was a deliberate imitation of System V sh and real ksh. Most other
  shells do not allow unmatched quotes (e.g. bash, zsh, pdksh, NetBSD /bin/sh,
  dash).
  
  PR:		bin/137657

Added:
  head/tools/regression/bin/sh/errors/backquote-error2.0   (contents, props changed)
Modified:
  head/bin/sh/parser.c

Modified: head/bin/sh/parser.c
==============================================================================
--- head/bin/sh/parser.c	Thu Oct  1 21:14:40 2009	(r197690)
+++ head/bin/sh/parser.c	Thu Oct  1 21:40:08 2009	(r197691)
@@ -82,7 +82,6 @@ struct heredoc {
 
 
 STATIC struct heredoc *heredoclist;	/* list of here documents to read */
-STATIC int parsebackquote;	/* nonzero if we are inside backquotes */
 STATIC int doprompt;		/* if set, prompt the user */
 STATIC int needprompt;		/* true if interactive and at start of line */
 STATIC int lasttoken;		/* last token read */
@@ -1043,7 +1042,7 @@ readtoken1(int firstc, char const *synta
 endword:
 	if (syntax == ARISYNTAX)
 		synerror("Missing '))'");
-	if (syntax != BASESYNTAX && ! parsebackquote && eofmark == NULL)
+	if (syntax != BASESYNTAX && eofmark == NULL)
 		synerror("Unterminated quoted string");
 	if (varnest != 0) {
 		startlinno = plinno;
@@ -1303,7 +1302,6 @@ parsesub: {
 
 parsebackq: {
 	struct nodelist **nlpp;
-	int savepbq;
 	union node *n;
 	char *volatile str;
 	struct jmploc jmploc;
@@ -1311,11 +1309,9 @@ parsebackq: {
 	int savelen;
 	int saveprompt;
 
-	savepbq = parsebackquote;
 	if (setjmp(jmploc.loc)) {
 		if (str)
 			ckfree(str);
-		parsebackquote = 0;
 		handler = savehandler;
 		longjmp(handler->loc, 1);
 	}
@@ -1397,7 +1393,6 @@ done:
 		nlpp = &(*nlpp)->next;
 	*nlpp = (struct nodelist *)stalloc(sizeof (struct nodelist));
 	(*nlpp)->next = NULL;
-	parsebackquote = oldstyle;
 
 	if (oldstyle) {
 		saveprompt = doprompt;
@@ -1433,7 +1428,6 @@ done:
 		str = NULL;
 		INTON;
 	}
-	parsebackquote = savepbq;
 	handler = savehandler;
 	if (arinest || dblquote)
 		USTPUTC(CTLBACKQ | CTLQUOTE, out);

Added: head/tools/regression/bin/sh/errors/backquote-error2.0
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/tools/regression/bin/sh/errors/backquote-error2.0	Thu Oct  1 21:40:08 2009	(r197691)
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+sh -c 'echo `echo .BA"DCODE.`
+echo ".BAD"CODE.' 2>&1 | grep -q BADCODE && exit 1
+echo '`"`' | sh -n 2>/dev/null && exit 1
+echo '`'"'"'`' | sh -n 2>/dev/null && exit 1
+exit 0


More information about the svn-src-all mailing list