summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2022-05-23 12:38:42 -0700
committerPaul Eggert <eggert@cs.ucla.edu>2022-05-23 12:40:26 -0700
commite7f8e8eb1fd41b308ee10741bbd8068acc1847c2 (patch)
treefd77cf49d10f23893b95c31bc8f9dc4b0bfe2cc3 /src
parent42db5cc8f58620b4c9c58a91c7683279c50503f9 (diff)
downloadgrep-e7f8e8eb1fd41b308ee10741bbd8068acc1847c2.tar.gz
grep: warn about stray backslashes
This papers over a problem reported by Benno Schulenberg and Tomasz Dziendzielski <https://bugs.gnu.org/39678> involving regular expressions like \a that have unspecified behavior. * src/dfasearch.c (dfawarn): Just output a warning. Don’t exit, as DFA_CONFUSING_BRACKETS_ERROR now does that for us, and we need the ability to warn without exiting to diagnose \a etc. (GEAcompile): Use new dfa options DFA_CONFUSING_BRACKETS_ERROR and DFA_STRAY_BACKSLASH_WARN.
Diffstat (limited to 'src')
-rw-r--r--src/dfasearch.c7
1 files changed, 4 insertions, 3 deletions
diff --git a/src/dfasearch.c b/src/dfasearch.c
index 8f48296a..7547a8a3 100644
--- a/src/dfasearch.c
+++ b/src/dfasearch.c
@@ -53,10 +53,10 @@ dfaerror (char const *mesg)
die (EXIT_TROUBLE, 0, "%s", mesg);
}
-_Noreturn void
+void
dfawarn (char const *mesg)
{
- dfaerror (mesg);
+ error (0, 0, _("warning: %s"), mesg);
}
/* If the DFA turns out to have some set of fixed strings one of
@@ -196,7 +196,8 @@ GEAcompile (char *pattern, idx_t size, reg_syntax_t syntax_bits,
if (match_icase)
syntax_bits |= RE_ICASE;
- int dfaopts = eolbyte ? 0 : DFA_EOL_NUL;
+ int dfaopts = (DFA_CONFUSING_BRACKETS_ERROR | DFA_STRAY_BACKSLASH_WARN
+ | (eolbyte ? 0 : DFA_EOL_NUL));
dfasyntax (dc->dfa, &localeinfo, syntax_bits, dfaopts);
bool bs_safe = !localeinfo.multibyte | localeinfo.using_utf8;