diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2018-07-27 11:36:00 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2018-07-27 11:36:00 +0300 |
commit | 3ddc932b0a808a4f5f55519ccf1d65f6caa41666 (patch) | |
tree | 6b2e10eda6ee5d523dbfafc7b0d591df910057a4 | |
parent | 1bc2871bbe4ae6b99fd1862a412440672846bc05 (diff) | |
download | egawk-3ddc932b0a808a4f5f55519ccf1d65f6caa41666.tar.gz egawk-3ddc932b0a808a4f5f55519ccf1d65f6caa41666.tar.bz2 egawk-3ddc932b0a808a4f5f55519ccf1d65f6caa41666.zip |
Add warnings for unknown regex escape sequences.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | re.c | 22 | ||||
-rw-r--r-- | test/ChangeLog | 4 | ||||
-rw-r--r-- | test/back89.ok | 1 | ||||
-rw-r--r-- | test/funstack.ok | 10 | ||||
-rw-r--r-- | test/gsubtst5.ok | 4 |
6 files changed, 46 insertions, 0 deletions
@@ -1,3 +1,8 @@ +2018-07-27 Arnold D. Robbins <arnold@skeeve.com> + + * re.c (make_regexp): Add warnings for unknown escape sequences, + similar to what we already do for strings. + 2018-07-13 Arnold D. Robbins <arnold@skeeve.com> * builtin.c (format_nan_inf): New function to generate +nan, -nan, @@ -100,6 +100,12 @@ make_regexp(const char *s, size_t len, bool ignorecase, bool dfa, bool canfatal) } } + const char *ok_to_escape; + if (do_traditional) + ok_to_escape = "()|*+?.^$\\[]/-"; + else + ok_to_escape = "<>`'BywWsS{}()|*+?.^$\\[]/-"; + /* We skip multibyte character, since it must not be a special character. */ if ((gawk_mb_cur_max == 1 || ! is_multibyte) && @@ -141,6 +147,14 @@ make_regexp(const char *s, size_t len, bool ignorecase, bool dfa, bool canfatal) case '9': /* a\9b not valid */ *dest++ = c; src++; + { + static bool warned[2]; + + if (! warned[c - '8']) { + warning(_("regexp escape sequence `\\%c' treated as plain `%c'"), c, c); + warned[c - '8'] = true; + } + } break; case 'y': /* normally \b */ /* gnu regex op */ @@ -152,6 +166,14 @@ make_regexp(const char *s, size_t len, bool ignorecase, bool dfa, bool canfatal) } /* else, fall through */ default: + if (strchr(ok_to_escape, c) == NULL) { + static bool warned[256]; + + if (! warned[c & 0xFF]) { + warning(_("regexp escape sequence `\\%c' is not a known regexp operator"), c); + warned[c & 0xFF] = true; + } + } *dest++ = '\\'; *dest++ = (char) c; src++; diff --git a/test/ChangeLog b/test/ChangeLog index 2d85c9a9..93a42b10 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,7 @@ +2018-07-27 Arnold D. Robbins <arnold@skeeve.com> + + * back89.ok, funstack.ok, gsubtst5.ok: Update after code changes. + 2018-07-13 Arnold D. Robbins <arnold@skeeve.com> * fmtspcl.awk, fmtspcl.tok, numrange.ok: Revised after code changes diff --git a/test/back89.ok b/test/back89.ok index e9ea4d5f..8eebce47 100644 --- a/test/back89.ok +++ b/test/back89.ok @@ -1 +1,2 @@ +gawk: back89.awk:1: warning: regexp escape sequence `\8' treated as plain `8' a8b diff --git a/test/funstack.ok b/test/funstack.ok index e69de29b..04030d3b 100644 --- a/test/funstack.ok +++ b/test/funstack.ok @@ -0,0 +1,10 @@ +gawk: funstack.awk:129: warning: regexp escape sequence `\"' is not a known regexp operator +gawk: funstack.awk:381: warning: regexp escape sequence `\e' is not a known regexp operator +gawk: funstack.awk:386: warning: regexp escape sequence `\i' is not a known regexp operator +gawk: funstack.awk:395: warning: regexp escape sequence `\o' is not a known regexp operator +gawk: funstack.awk:402: warning: regexp escape sequence `\u' is not a known regexp operator +gawk: funstack.awk:412: warning: regexp escape sequence `\A' is not a known regexp operator +gawk: funstack.awk:427: warning: regexp escape sequence `\I' is not a known regexp operator +gawk: funstack.awk:436: warning: regexp escape sequence `\O' is not a known regexp operator +gawk: funstack.awk:443: warning: regexp escape sequence `\U' is not a known regexp operator +gawk: funstack.awk:952: warning: regexp escape sequence `\&' is not a known regexp operator diff --git a/test/gsubtst5.ok b/test/gsubtst5.ok index b038c8af..66488fd1 100644 --- a/test/gsubtst5.ok +++ b/test/gsubtst5.ok @@ -1 +1,5 @@ +gawk: gsubtst5.awk:95: warning: regexp escape sequence `\ ' is not a known regexp operator +gawk: gsubtst5.awk:95: warning: regexp escape sequence `\"' is not a known regexp operator +gawk: gsubtst5.awk:95: warning: regexp escape sequence `\@' is not a known regexp operator +gawk: gsubtst5.awk:95: warning: regexp escape sequence `\,' is not a known regexp operator ThisIsaTitleMyTitle |