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