aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--re.c22
-rw-r--r--test/ChangeLog4
-rw-r--r--test/back89.ok1
-rw-r--r--test/funstack.ok10
-rw-r--r--test/gsubtst5.ok4
6 files changed, 46 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 8e2c226b..3c7d5fb1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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,
diff --git a/re.c b/re.c
index eedd05ac..eefdfcd7 100644
--- a/re.c
+++ b/re.c
@@ -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