Module Name: src Committed By: christos Date: Mon May 5 17:12:11 UTC 2014
Modified Files: src/usr.bin/sed: compile.c Log Message: Handle a closing brace at the end of a command without a preceding semi-colon: /foo/ {p;d} To generate a diff of this commit: cvs rdiff -u -r1.39 -r1.40 src/usr.bin/sed/compile.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/sed/compile.c diff -u src/usr.bin/sed/compile.c:1.39 src/usr.bin/sed/compile.c:1.40 --- src/usr.bin/sed/compile.c:1.39 Fri Jun 28 11:04:35 2013 +++ src/usr.bin/sed/compile.c Mon May 5 13:12:11 2014 @@ -1,4 +1,4 @@ -/* $NetBSD: compile.c,v 1.39 2013/06/28 15:04:35 joerg Exp $ */ +/* $NetBSD: compile.c,v 1.40 2014/05/05 17:12:11 christos Exp $ */ /*- * Copyright (c) 1992, 1993 @@ -76,7 +76,7 @@ #if 0 static char sccsid[] = "@(#)compile.c 8.2 (Berkeley) 4/28/95"; #else -__RCSID("$NetBSD: compile.c,v 1.39 2013/06/28 15:04:35 joerg Exp $"); +__RCSID("$NetBSD: compile.c,v 1.40 2014/05/05 17:12:11 christos Exp $"); #endif #endif /* not lint */ @@ -281,14 +281,19 @@ nonsel: /* Now parse the command */ case EMPTY: /* d D g G h H l n N p P q x = \0 */ p++; EATSPACE(); - if (*p == ';') { + switch (*p) { + case ';': p++; link = &cmd->next; goto semicolon; - } - if (*p) + case '}': + goto semicolon; + case '\0': + break; + default: err(COMPILE, "extra characters at the end of %c command", cmd->code); + } break; case TEXT: /* a c i */ p++; @@ -365,14 +370,19 @@ nonsel: /* Now parse the command */ p++; p = compile_tr(p, (char **)(void *)&cmd->u.y); EATSPACE(); - if (*p == ';') { + switch (*p) { + case ';': p++; link = &cmd->next; goto semicolon; - } - if (*p) + case '}': + goto semicolon; + case '\0': + break; + default: err(COMPILE, "extra text at the end of a transform command"); + } break; } }