diff options
author | Marshall Clow <mclow.lists@gmail.com> | 2017-10-12 14:48:09 +0000 |
---|---|---|
committer | Marshall Clow <mclow.lists@gmail.com> | 2017-10-12 14:48:09 +0000 |
commit | 2fca7aeb09329409d2a3dba0e72fae4cb6707df6 (patch) | |
tree | d598ba438385bcdaf147ccfbdff064f848969c00 /libcxx/fuzzing | |
parent | 1d473652592ce8d7372505f074b974b46f515f31 (diff) | |
download | bcm5719-llvm-2fca7aeb09329409d2a3dba0e72fae4cb6707df6.tar.gz bcm5719-llvm-2fca7aeb09329409d2a3dba0e72fae4cb6707df6.zip |
More fuzzing infastructre - regex
llvm-svn: 315582
Diffstat (limited to 'libcxx/fuzzing')
-rw-r--r-- | libcxx/fuzzing/fuzzing.cpp | 58 | ||||
-rw-r--r-- | libcxx/fuzzing/fuzzing.h | 10 |
2 files changed, 65 insertions, 3 deletions
diff --git a/libcxx/fuzzing/fuzzing.cpp b/libcxx/fuzzing/fuzzing.cpp index cc349cdee69..d4d0e602cc4 100644 --- a/libcxx/fuzzing/fuzzing.cpp +++ b/libcxx/fuzzing/fuzzing.cpp @@ -26,8 +26,7 @@ #include "fuzzing.h" #include <vector> #include <algorithm> - -#include <iostream> +#include <regex> // If we had C++14, we could use the four iterator version of is_permutation @@ -219,4 +218,59 @@ int partial_sort (const uint8_t *data, size_t size) return 0; } + +// -- regex fuzzers + +static int regex_helper(const uint8_t *data, size_t size, std::regex::flag_type flag) +{ + if (size > 0) + { + try + { + std::string s((const char *)data, size); + std::regex re(s, flag); + return std::regex_match(s, re) ? 1 : 0; + } + catch (std::regex_error &ex) {} + } + return 0; +} + + +int regex_ECMAScript (const uint8_t *data, size_t size) +{ + (void) regex_helper(data, size, std::regex_constants::ECMAScript); + return 0; +} + +int regex_POSIX (const uint8_t *data, size_t size) +{ + (void) regex_helper(data, size, std::regex_constants::basic); + return 0; +} + +int regex_extended (const uint8_t *data, size_t size) +{ + (void) regex_helper(data, size, std::regex_constants::extended); + return 0; +} + +int regex_awk (const uint8_t *data, size_t size) +{ + (void) regex_helper(data, size, std::regex_constants::awk); + return 0; +} + +int regex_grep (const uint8_t *data, size_t size) +{ + (void) regex_helper(data, size, std::regex_constants::grep); + return 0; +} + +int regex_egrep (const uint8_t *data, size_t size) +{ + (void) regex_helper(data, size, std::regex_constants::egrep); + return 0; +} + } // namespace fuzzing diff --git a/libcxx/fuzzing/fuzzing.h b/libcxx/fuzzing/fuzzing.h index b8116fbc11d..6624955f8ed 100644 --- a/libcxx/fuzzing/fuzzing.h +++ b/libcxx/fuzzing/fuzzing.h @@ -27,7 +27,15 @@ namespace fuzzing { int nth_element (const uint8_t *data, size_t size); int partial_sort (const uint8_t *data, size_t size); - + +// Various flavors of regex + int regex_ECMAScript (const uint8_t *data, size_t size); + int regex_POSIX (const uint8_t *data, size_t size); + int regex_extended (const uint8_t *data, size_t size); + int regex_awk (const uint8_t *data, size_t size); + int regex_grep (const uint8_t *data, size_t size); + int regex_egrep (const uint8_t *data, size_t size); + } // namespace fuzzing #endif // _LIBCPP_FUZZING |