diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2015-12-30 11:54:09 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2015-12-30 11:54:09 +0000 |
| commit | b4c64ad90b81d2a779786b7edb4c5c6dd28cc57d (patch) | |
| tree | 13f237c02db4d1894ab06884d1b739344766bede /test/std/re | |
| parent | 61b9a7258a7693d7f3674a5a1daf7b036ff1d382 (diff) | |
Notes
Diffstat (limited to 'test/std/re')
4 files changed, 74 insertions, 1 deletions
diff --git a/test/std/re/re.alg/re.alg.search/grep.pass.cpp b/test/std/re/re.alg/re.alg.search/grep.pass.cpp index 113243ecd349..9d74c2417d2d 100644 --- a/test/std/re/re.alg/re.alg.search/grep.pass.cpp +++ b/test/std/re/re.alg/re.alg.search/grep.pass.cpp @@ -7,6 +7,7 @@ // //===----------------------------------------------------------------------===// +// XFAIL: libcpp-no-exceptions // <regex> // template <class BidirectionalIterator, class Allocator, class charT, class traits> @@ -19,8 +20,34 @@ #include <regex> #include <cassert> +#include "test_macros.h" #include "test_iterators.h" +extern "C" void LLVMFuzzerTestOneInput(const char *data) +{ + size_t size = strlen(data); + if (size > 0) + { + try + { + std::regex::flag_type flag = std::regex_constants::grep; + std::string s((const char *)data, size); + std::regex re(s, flag); + std::regex_match(s, re); + } + catch (std::regex_error &ex) {} + } +} + + +void fuzz_tests() // patterns that the fuzzer has found +{ +// Raw string literals are a C++11 feature. +#if TEST_STD_VER >= 11 + LLVMFuzzerTestOneInput(R"XX(Õ)_%()()((\8'_%()_%()_%()_%(()_%()_%()_%(.t;)()¥f()_%()(.)_%;)()!¥f(((()()XX"); +#endif +} + int main() { { @@ -55,4 +82,5 @@ int main() assert(m.position(0) == 0); assert(m.str(0) == ""); } + fuzz_tests(); } diff --git a/test/std/re/re.regex/re.regex.assign/assign.pass.cpp b/test/std/re/re.regex/re.regex.assign/assign.pass.cpp index 8bf98268c493..9c5f834b9452 100644 --- a/test/std/re/re.regex/re.regex.assign/assign.pass.cpp +++ b/test/std/re/re.regex/re.regex.assign/assign.pass.cpp @@ -7,6 +7,7 @@ // //===----------------------------------------------------------------------===// +// XFAIL: libcpp-no-exceptions // <regex> // template <class charT, class traits = regex_traits<charT>> class basic_regex; diff --git a/test/std/re/re.regex/re.regex.construct/bad_escape.pass.cpp b/test/std/re/re.regex/re.regex.construct/bad_escape.pass.cpp index 9455527412bb..4da4d957a88a 100644 --- a/test/std/re/re.regex/re.regex.construct/bad_escape.pass.cpp +++ b/test/std/re/re.regex/re.regex.construct/bad_escape.pass.cpp @@ -7,6 +7,7 @@ // //===----------------------------------------------------------------------===// +// XFAIL: libcpp-no-exceptions // <regex> // template <class charT, class traits = regex_traits<charT>> class basic_regex; @@ -22,7 +23,7 @@ static bool error_escape_thrown(const char *pat) bool result = false; try { std::regex re(pat); - } catch (std::regex_error &ex) { + } catch (const std::regex_error &ex) { result = (ex.code() == std::regex_constants::error_escape); } return result; diff --git a/test/std/re/re.regex/re.regex.construct/bad_repeat.pass.cpp b/test/std/re/re.regex/re.regex.construct/bad_repeat.pass.cpp new file mode 100644 index 000000000000..c21672f02c98 --- /dev/null +++ b/test/std/re/re.regex/re.regex.construct/bad_repeat.pass.cpp @@ -0,0 +1,43 @@ +//===----------------------------------------------------------------------===// +// +// The LLVM Compiler Infrastructure +// +// This file is dual licensed under the MIT and the University of Illinois Open +// Source Licenses. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// + +// XFAIL: libcpp-no-exceptions +// <regex> + +// template <class charT, class traits = regex_traits<charT>> class basic_regex; + +// template <class ST, class SA> +// basic_regex(const basic_string<charT, ST, SA>& s); + +#include <regex> +#include <cassert> + +static bool error_badrepeat_thrown(const char *pat) +{ + bool result = false; + try { + std::regex re(pat); + } catch (const std::regex_error &ex) { + result = (ex.code() == std::regex_constants::error_badrepeat); + } + return result; +} + +int main() +{ + assert(error_badrepeat_thrown("?a")); + assert(error_badrepeat_thrown("*a")); + assert(error_badrepeat_thrown("+a")); + assert(error_badrepeat_thrown("{a")); + + assert(error_badrepeat_thrown("?(a+)")); + assert(error_badrepeat_thrown("*(a+)")); + assert(error_badrepeat_thrown("+(a+)")); + assert(error_badrepeat_thrown("{(a+)")); +} |
