| Index: test/fuzzer/regexp.cc
 | 
| diff --git a/test/fuzzer/regexp.cc b/test/fuzzer/regexp.cc
 | 
| new file mode 100644
 | 
| index 0000000000000000000000000000000000000000..4c849cdad0584b443d647feede10dc6fdd99459b
 | 
| --- /dev/null
 | 
| +++ b/test/fuzzer/regexp.cc
 | 
| @@ -0,0 +1,54 @@
 | 
| +// Copyright 2016 the V8 project authors. All rights reserved.
 | 
| +// Use of this source code is governed by a BSD-style license that can be
 | 
| +// found in the LICENSE file.
 | 
| +
 | 
| +#include <stddef.h>
 | 
| +#include <stdint.h>
 | 
| +
 | 
| +#include "include/v8.h"
 | 
| +#include "src/factory.h"
 | 
| +#include "src/objects-inl.h"
 | 
| +#include "src/objects.h"
 | 
| +#include "src/regexp/jsregexp.h"
 | 
| +#include "test/fuzzer/fuzzer-support.h"
 | 
| +
 | 
| +namespace i = v8::internal;
 | 
| +
 | 
| +extern "C" int LLVMFuzzerTestOneInput(const uint8_t* data, size_t size) {
 | 
| +  v8_fuzzer::FuzzerSupport* support = v8_fuzzer::FuzzerSupport::Get();
 | 
| +  v8::Isolate* isolate = support->GetIsolate();
 | 
| +
 | 
| +  v8::Isolate::Scope isolate_scope(isolate);
 | 
| +  v8::HandleScope handle_scope(isolate);
 | 
| +  v8::Context::Scope context_scope(support->GetContext());
 | 
| +  v8::TryCatch try_catch(isolate);
 | 
| +
 | 
| +  i::FLAG_harmony_unicode_regexps = true;
 | 
| +  i::FLAG_harmony_regexp_lookbehind = true;
 | 
| +
 | 
| +  i::Isolate* i_isolate = reinterpret_cast<i::Isolate*>(isolate);
 | 
| +  i::Factory* factory = i_isolate->factory();
 | 
| +
 | 
| +  if (size > INT_MAX) return 0;
 | 
| +  i::MaybeHandle<i::String> maybe_source = factory->NewStringFromOneByte(
 | 
| +      i::Vector<const uint8_t>(data, static_cast<int>(size)));
 | 
| +  i::Handle<i::String> source;
 | 
| +  if (!maybe_source.ToHandle(&source)) return 0;
 | 
| +
 | 
| +  static const int kAllFlags = i::JSRegExp::kGlobal | i::JSRegExp::kIgnoreCase |
 | 
| +                               i::JSRegExp::kMultiline | i::JSRegExp::kSticky |
 | 
| +                               i::JSRegExp::kUnicode;
 | 
| +
 | 
| +  i::Handle<i::JSArray> results_array = factory->NewJSArray(4);
 | 
| +
 | 
| +  for (int flags = 0; flags <= kAllFlags; flags++) {
 | 
| +    v8::TryCatch try_catch(isolate);
 | 
| +    i::MaybeHandle<i::JSRegExp> maybe_regexp =
 | 
| +        i::JSRegExp::New(source, static_cast<i::JSRegExp::Flags>(flags));
 | 
| +    i::Handle<i::JSRegExp> regexp;
 | 
| +    if (!maybe_regexp.ToHandle(®exp)) continue;
 | 
| +    USE(i::RegExpImpl::Exec(regexp, factory->empty_string(), 0, results_array));
 | 
| +  }
 | 
| +
 | 
| +  return 0;
 | 
| +}
 | 
| 
 |