[PATCH] D16262: [libc++] Treat trailing backslashes in a regex pattern as invalid.
Josh Petrie via cfe-commits
cfe-commits at lists.llvm.org
Sat Jan 16 14:42:34 PST 2016
jpetrie created this revision.
jpetrie added a reviewer: mclow.lists.
jpetrie added a subscriber: cfe-commits.
std::regex should throw std::regex_error if constructed with a pattern ending in a trailing backslash, since a trailing backlash is not a valid escape sequence.
http://reviews.llvm.org/D16262
Files:
include/regex
test/std/re/re.regex/re.regex.construct/bad_escape.pass.cpp
Index: test/std/re/re.regex/re.regex.construct/bad_escape.pass.cpp
===================================================================
--- test/std/re/re.regex/re.regex.construct/bad_escape.pass.cpp
+++ test/std/re/re.regex/re.regex.construct/bad_escape.pass.cpp
@@ -33,6 +33,7 @@
{
assert(error_escape_thrown("[\\a]"));
assert(error_escape_thrown("\\a"));
+ assert(error_escape_thrown("\\"));
assert(error_escape_thrown("[\\e]"));
assert(error_escape_thrown("\\e"));
Index: include/regex
===================================================================
--- include/regex
+++ include/regex
@@ -4265,6 +4265,9 @@
if (__first != __last && *__first == '\\')
{
_ForwardIterator __t1 = _VSTD::next(__first);
+ if (__t1 == __last)
+ __throw_regex_error<regex_constants::error_escape>();
+
_ForwardIterator __t2 = __parse_decimal_escape(__t1, __last);
if (__t2 != __t1)
__first = __t2;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D16262.45082.patch
Type: text/x-patch
Size: 976 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20160116/8820a32b/attachment-0001.bin>
More information about the cfe-commits
mailing list