[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