From cd043149bf0c7ce9709d25bb17bf6be7d3a681e0 Mon Sep 17 00:00:00 2001 From: gtsoul-tech Date: Thu, 7 Nov 2024 09:31:29 +0200 Subject: [PATCH] regression error unit test --- unit/hyperscan/rebar_tests.cpp | 50 +++++++++++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/unit/hyperscan/rebar_tests.cpp b/unit/hyperscan/rebar_tests.cpp index 26e72055..320b0d06 100644 --- a/unit/hyperscan/rebar_tests.cpp +++ b/unit/hyperscan/rebar_tests.cpp @@ -228,4 +228,52 @@ TEST(rebar, lh3lh3_reb_date_grep) { hs_free_database(db); err = hs_free_scratch(scratch); ASSERT_EQ(HS_SUCCESS, err); -} \ No newline at end of file +} + + +const char *patterns[] = { + "^muvoy-nyemcynjywynamlahi/nyzye/khjdrehko-(qjhn|lyol)-.*/0$", + "^cop/devel/workflows-(prod|test)-.*/[0-9]+$", // Regex pattern that will match our fixture + +}; + +TEST(bug317, regressionOnx86Bug317) { + hs_database_t *database; + hs_compile_error_t *compile_err; + + unsigned ids[2] = {0}; + ids[0]=0; + ids[1]=1; + + const unsigned flag = HS_FLAG_SINGLEMATCH | HS_FLAG_ALLOWEMPTY | HS_FLAG_UTF8 | HS_FLAG_PREFILTER; + std::vector flags; + for (size_t i = 0; i < 2; ++i) { + flags.push_back(flag); + } + hs_error_t err = hs_compile_multi(patterns, flags.data(), ids, 2, HS_MODE_BLOCK, NULL, &database, &compile_err); + ASSERT_EQ(HS_SUCCESS, err); + ASSERT_TRUE(database != nullptr); + + // Allocate scratch space + hs_scratch_t *scratch = NULL; + err = hs_alloc_scratch(database, &scratch); + ASSERT_EQ(HS_SUCCESS, err); + ASSERT_TRUE(scratch != nullptr); + // This input should match + const char* input = "cop/devel/workflows-prod-build-cop-cop-ingestor/0"; + + // Scan the input + bool matchFound = false; + auto matchHandler = [](unsigned int, unsigned long long, unsigned long long, unsigned int, void *ctx) -> int { + bool *matchFound = static_cast(ctx); + *matchFound = true; + return 0; + }; + + err= hs_scan(database, input, strlen(input), 0, scratch, matchHandler, reinterpret_cast(&matchFound)); + ASSERT_EQ(HS_SUCCESS, err); + ASSERT_EQ(true, matchFound); + // Clean up + hs_free_database(database); + err = hs_free_scratch(scratch); +}