Fix s/[/]// handling (noted by Dumas Patrice).

This commit is contained in:
Matt Kraai 2001-08-24 14:45:50 +00:00
parent 31b35a16e0
commit a0065d5955
3 changed files with 30 additions and 2 deletions

View File

@ -15,6 +15,8 @@
-- a whole bunch of ash size optimizations -- a whole bunch of ash size optimizations
* Rodney Brown <RDBrown@mira.net> * Rodney Brown <RDBrown@mira.net>
-- Optimized gzip.c, shrinking it be ~1.5k -- Optimized gzip.c, shrinking it be ~1.5k
* Matt Kraai
-- Fix sed s/[/]// handling (closes: #1208).
-Erik Andersen, --not yet released-- -Erik Andersen, --not yet released--

View File

@ -144,8 +144,21 @@ static void destroy_cmd_strs()
*/ */
static int index_of_next_unescaped_regexp_delim(struct sed_cmd *sed_cmd, const char *str, int idx) static int index_of_next_unescaped_regexp_delim(struct sed_cmd *sed_cmd, const char *str, int idx)
{ {
int bracket = -1;
int escaped = 0;
for ( ; str[idx]; idx++) { for ( ; str[idx]; idx++) {
if (str[idx] == sed_cmd->delimiter && str[idx-1] != '\\') if (bracket != -1) {
if (str[idx] == ']' && !(bracket == idx - 1 ||
(bracket == idx - 2 && str[idx-1] == '^')))
bracket = -1;
} else if (escaped)
escaped = 0;
else if (str[idx] == '\\')
escaped = 1;
else if (str[idx] == '[')
bracket = idx;
else if (str[idx] == sed_cmd->delimiter)
return idx; return idx;
} }

15
sed.c
View File

@ -144,8 +144,21 @@ static void destroy_cmd_strs()
*/ */
static int index_of_next_unescaped_regexp_delim(struct sed_cmd *sed_cmd, const char *str, int idx) static int index_of_next_unescaped_regexp_delim(struct sed_cmd *sed_cmd, const char *str, int idx)
{ {
int bracket = -1;
int escaped = 0;
for ( ; str[idx]; idx++) { for ( ; str[idx]; idx++) {
if (str[idx] == sed_cmd->delimiter && str[idx-1] != '\\') if (bracket != -1) {
if (str[idx] == ']' && !(bracket == idx - 1 ||
(bracket == idx - 2 && str[idx-1] == '^')))
bracket = -1;
} else if (escaped)
escaped = 0;
else if (str[idx] == '\\')
escaped = 1;
else if (str[idx] == '[')
bracket = idx;
else if (str[idx] == sed_cmd->delimiter)
return idx; return idx;
} }