Fix s/[/]// handling (noted by Dumas Patrice).
This commit is contained in:
parent
31b35a16e0
commit
a0065d5955
@ -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--
|
||||||
|
@ -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
15
sed.c
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user