Fix a crasher found by libFuzzer

llvm-svn: 245849
This commit is contained in:
Marshall Clow 2015-08-24 15:57:09 +00:00
parent db2f8a3cfd
commit 550dfe79ca
2 changed files with 25 additions and 0 deletions

View File

@ -1733,6 +1733,8 @@ template <class _CharT>
void
__back_ref<_CharT>::__exec(__state& __s) const
{
if (__mexp_ > __s.__sub_matches_.size())
__throw_regex_error<regex_constants::error_backref>();
sub_match<const _CharT*>& __sm = __s.__sub_matches_[__mexp_-1];
if (__sm.matched)
{

View File

@ -21,6 +21,28 @@
#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
{
LLVMFuzzerTestOneInput(R"XX(Õ)_%()()((\8'_%()_%()_%()_%(()_%()_%()_%(.t;)()¥f()_%()(.)_%;)()!¥f(((()()XX");
}
int main()
{
{
@ -55,4 +77,5 @@ int main()
assert(m.position(0) == 0);
assert(m.str(0) == "");
}
fuzz_tests();
}