2 files changed, 9 insertions(+), 19 deletions(-) src/fa.c | 26 +++++++------------------- tests/fatest.c | 2 ++
# HG changeset patch # User David Lutterkort <[EMAIL PROTECTED]> # Date 1218489925 25200 # Node ID 524fbc9f65e95d5f837f80a994d845893e0cabe5 # Parent 4c27b26fe4e256f0da5c15a56d638ec00385a428 Posix ERE compliant escaping Posix extended regular expressions treat a backslash outside of a character class always as an escape character, with the character sequence '\\x' being identical to 'x', even if 'x' is a special char like '['. Inside character classes, the backslash does not escape anything, and is treated as an ordianry character. See regex(7) or http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap09.html#tag_09_04 diff -r 4c27b26fe4e2 -r 524fbc9f65e9 src/fa.c --- a/src/fa.c Sat Aug 09 21:50:15 2008 -0700 +++ b/src/fa.c Mon Aug 11 14:25:25 2008 -0700 @@ -2515,22 +2515,10 @@ return c; } -static char parse_char(const char **regexp, const char *special) { - if (match(regexp, '\\')) { - char c = next(regexp); - if (special != NULL) { - char *f = strchr(special, c); - if (f != NULL) - return c; - } - if (c == 'n') - return '\n'; - else if (c == 't') - return '\t'; - else if (c == 'r') - return '\r'; - else - return c; +static char parse_char(const char **regexp, int quoted) { + if (quoted && **regexp == '\\') { + next(regexp); + return next(regexp); } else { return next(regexp); } @@ -2548,7 +2536,7 @@ *error = REG_EBRACK; goto error; } - char from = parse_char(regexp, NULL); + char from = parse_char(regexp, 0); char to = from; if (match(regexp, '-')) { if (! more(regexp)) { @@ -2560,7 +2548,7 @@ add_re_char(re, '-', '-'); return; } else { - to = parse_char(regexp, NULL); + to = parse_char(regexp, 0); } } add_re_char(re, from, to); @@ -2606,7 +2594,7 @@ add_re_char(re, '\n', '\n'); } else { if (more(regexp)) { - char c = parse_char(regexp, special_chars); + char c = parse_char(regexp, 1); re = make_re_char(c); } } diff -r 4c27b26fe4e2 -r 524fbc9f65e9 tests/fatest.c --- a/tests/fatest.c Sat Aug 09 21:50:15 2008 -0700 +++ b/tests/fatest.c Mon Aug 11 14:25:25 2008 -0700 @@ -321,6 +321,8 @@ assertExample(tc, "u+|[0-9]", "u"); assertExample(tc, "vu+|[0-9]", "0"); assertExample(tc, "vu{2}|[0-9]", "0"); + assertExample(tc, "\\[", "["); + assertExample(tc, "[\\]", "\\"); assertExample(tc, "\001((\002.)*\001)+\002", "\001\001\002"); assertExample(tc, "\001((\001.)*\002)+\002", "\001\002\002"); _______________________________________________ augeas-devel mailing list [email protected] https://www.redhat.com/mailman/listinfo/augeas-devel
