mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-24 08:32:02 +00:00
Merge pull request #46819 from ClickHouse/rs/fix-slowhyperscanchecker
Fix SlowWithHyperscanChecker
This commit is contained in:
commit
a402b61ceb
@ -48,12 +48,12 @@ bool SlowWithHyperscanChecker::isSlowOneRepeat(std::string_view regexp)
|
|||||||
re2_st::StringPiece haystack(regexp.data(), regexp.size());
|
re2_st::StringPiece haystack(regexp.data(), regexp.size());
|
||||||
re2_st::StringPiece matches[2];
|
re2_st::StringPiece matches[2];
|
||||||
size_t start_pos = 0;
|
size_t start_pos = 0;
|
||||||
while (start_pos < regexp.size())
|
while (start_pos < haystack.size())
|
||||||
{
|
{
|
||||||
if (searcher_one_repeat.Match(haystack, start_pos, regexp.size(), re2_st::RE2::Anchor::UNANCHORED, matches, 2))
|
if (searcher_one_repeat.Match(haystack, start_pos, haystack.size(), re2_st::RE2::Anchor::UNANCHORED, matches, 2))
|
||||||
{
|
{
|
||||||
const auto & match = matches[0];
|
const auto & match = matches[0];
|
||||||
start_pos += (matches[0].data() - haystack.data()) + match.length(); // fwd by prefix + match length
|
start_pos = (matches[0].data() - haystack.data()) + match.size(); // new start pos = prefix before match + match length
|
||||||
const auto & submatch = matches[1];
|
const auto & submatch = matches[1];
|
||||||
if (isLargerThanFifty({submatch.data(), submatch.size()}))
|
if (isLargerThanFifty({submatch.data(), submatch.size()}))
|
||||||
return true;
|
return true;
|
||||||
@ -70,12 +70,12 @@ bool SlowWithHyperscanChecker::isSlowTwoRepeats(std::string_view regexp)
|
|||||||
re2_st::StringPiece haystack(regexp.data(), regexp.size());
|
re2_st::StringPiece haystack(regexp.data(), regexp.size());
|
||||||
re2_st::StringPiece matches[3];
|
re2_st::StringPiece matches[3];
|
||||||
size_t start_pos = 0;
|
size_t start_pos = 0;
|
||||||
while (start_pos < regexp.size())
|
while (start_pos < haystack.size())
|
||||||
{
|
{
|
||||||
if (searcher_two_repeats.Match(haystack, start_pos, regexp.size(), re2_st::RE2::Anchor::UNANCHORED, matches, 3))
|
if (searcher_two_repeats.Match(haystack, start_pos, haystack.size(), re2_st::RE2::Anchor::UNANCHORED, matches, 3))
|
||||||
{
|
{
|
||||||
const auto & match = matches[0];
|
const auto & match = matches[0];
|
||||||
start_pos += (matches[0].data() - haystack.data()) + match.length(); // fwd by prefix + match length
|
start_pos = (matches[0].data() - haystack.data()) + match.size(); // new start pos = prefix before match + match length
|
||||||
const auto & submatch1 = matches[1];
|
const auto & submatch1 = matches[1];
|
||||||
const auto & submatch2 = matches[2];
|
const auto & submatch2 = matches[2];
|
||||||
if (isLargerThanFifty({submatch1.data(), submatch1.size()})
|
if (isLargerThanFifty({submatch1.data(), submatch1.size()})
|
||||||
|
Loading…
Reference in New Issue
Block a user