From 5e4861ab4c41b6e000dc1f66225486330b5e5a2d Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Fri, 21 Sep 2018 13:15:38 +0300 Subject: [PATCH 135/289] Bug fix for trailing backslash in dynamic regexp. --- ChangeLog | 8 ++++++++ re.c | 8 +++++++- test/ChangeLog | 5 +++++ test/Makefile.am | 5 ++++- test/Makefile.in | 10 +++++++++- test/Maketests | 5 +++++ test/trailbs.awk | 1 + test/trailbs.in | 1 + test/trailbs.ok | 2 ++ 9 files changed, 42 insertions(+), 3 deletions(-) create mode 100644 test/trailbs.awk create mode 100644 test/trailbs.in create mode 100644 test/trailbs.ok diff --git a/re.c b/re.c index eefdfcd7..a693a9ad 100644 --- a/re.c +++ b/re.c @@ -112,6 +112,12 @@ make_regexp(const char *s, size_t len, bool ignorecase, bool dfa, bool canfatal) (*src == '\\')) { c = *++src; switch (c) { + case '\0': /* \\ before \0, either dynamic data or real end of string */ + if (src >= s + len) + *dest++ = '\\'; // at end of string, will fatal below + else + fatal(_("invalid NUL byte in dynamic regexp")); + break; case 'a': case 'b': case 'f': @@ -241,7 +247,7 @@ make_regexp(const char *s, size_t len, bool ignorecase, bool dfa, bool canfatal) error("%s: /%s/", rerr, buf); return NULL; } - fatal("%s: /%s/", rerr, buf); + fatal("invalid regexp: %s: /%s/", rerr, buf); } /* gack. this must be done *after* re_compile_pattern */ -- 2.19.1