]> git.ipfire.org Git - thirdparty/vectorscan.git/commitdiff
unit: check fix of rose instr program dead loop
authorHong, Yang A <yang.a.hong@intel.com>
Tue, 2 Apr 2019 15:36:03 +0000 (23:36 +0800)
committerWang Xiang W <xiang.w.wang@intel.com>
Wed, 10 Apr 2019 10:53:26 +0000 (06:53 -0400)
unit/hyperscan/multi.cpp

index d43ce3274ebbbe2ea9e8cf283735f062dbd77761..85d8cd25fbc9bd0b684724c1b9e3034b7087feb8 100644 (file)
@@ -333,3 +333,37 @@ TEST(MPV, UE_2395) {
     err = hs_free_scratch(scratch);
     ASSERT_EQ(HS_SUCCESS, err);
 }
+
+TEST(MMRoseLiteralPath, issue_141) {
+    hs_database_t *db = nullptr;
+    hs_compile_error_t *compile_err = nullptr;
+    CallBackContext c;
+    string data = "/odezhda-dlya-bega/";
+    const char *expr[] = {"/odezhda-dlya-bega/",
+                          "kurtki-i-vetrovki-dlya-bega",
+                          "futbolki-i-mayki-dlya-bega"};
+    unsigned flags[] = {HS_FLAG_DOTALL | HS_FLAG_SINGLEMATCH,
+                        HS_FLAG_DOTALL | HS_FLAG_SINGLEMATCH,
+                        HS_FLAG_DOTALL | HS_FLAG_SINGLEMATCH};
+    hs_error_t err = hs_compile_multi(expr, flags, nullptr, 3, HS_MODE_BLOCK,
+                                      nullptr, &db, &compile_err);
+
+    ASSERT_EQ(HS_SUCCESS, err);
+    ASSERT_TRUE(db != nullptr);
+
+    hs_scratch_t *scratch = nullptr;
+    err = hs_alloc_scratch(db, &scratch);
+    ASSERT_EQ(HS_SUCCESS, err);
+    ASSERT_TRUE(scratch != nullptr);
+
+    c.halt = 0;
+    err = hs_scan(db, data.c_str(), data.size(), 0, scratch, record_cb,
+                  (void *)&c);
+    ASSERT_EQ(HS_SUCCESS, err);
+    ASSERT_EQ(1U, c.matches.size());
+    ASSERT_EQ(MatchRecord(19, 0), c.matches[0]);
+
+    hs_free_database(db);
+    err = hs_free_scratch(scratch);
+    ASSERT_EQ(HS_SUCCESS, err);
+}