Don't let DFA execution bail when slow for RE2::Set.

Change-Id: I0e6b8c32cc78a4d37ecf241f2c42c3d2303f388d
Reviewed-on: https://code-review.googlesource.com/c/re2/+/42012
Reviewed-by: Paul Wankadia <junyer@google.com>
diff --git a/re2/dfa.cc b/re2/dfa.cc
index 91292d4..81adb30 100644
--- a/re2/dfa.cc
+++ b/re2/dfa.cc
@@ -1415,9 +1415,11 @@
         // byte runs at about 0.2 MB/s, while the NFA (nfa.cc) can do the
         // same at about 2 MB/s.  Unless we're processing an average
         // of 10 bytes per state computation, fail so that RE2 can
-        // fall back to the NFA.
+        // fall back to the NFA.  However, RE2::Set cannot fall back,
+        // so we just have to keep on keeping on in that case.
         if (dfa_should_bail_when_slow && resetp != NULL &&
-            static_cast<size_t>(p - resetp) < 10*state_cache_.size()) {
+            static_cast<size_t>(p - resetp) < 10*state_cache_.size() &&
+            kind_ != Prog::kManyMatch) {
           params->failed = true;
           return false;
         }
diff --git a/re2/testing/set_test.cc b/re2/testing/set_test.cc
index ad20ed7..61d1cf2 100644
--- a/re2/testing/set_test.cc
+++ b/re2/testing/set_test.cc
@@ -201,18 +201,4 @@
   ASSERT_EQ(v[0], 0);
 }
 
-TEST(Set, OutOfMemory) {
-  RE2::Set s(RE2::DefaultOptions, RE2::UNANCHORED);
-
-  std::string a(10000, 'a');
-  ASSERT_EQ(s.Add(a, NULL), 0);
-  ASSERT_EQ(s.Compile(), true);
-
-  std::vector<int> v;
-  RE2::Set::ErrorInfo ei;
-  ASSERT_EQ(s.Match(a, &v, &ei), false);
-  ASSERT_EQ(v.size(), 0);
-  ASSERT_EQ(ei.kind, RE2::Set::kOutOfMemory);
-}
-
 }  // namespace re2