Projects
Mega:24.03:SP1:Everything
pcre2
_service:tar_scm:backport-Remove-incorrect-opti...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:backport-Remove-incorrect-optimization-in-DFA-matching-when-p.patch of Package pcre2
From 674b6640e702705e8e90125f972197fae3aa364d Mon Sep 17 00:00:00 2001 From: Philip Hazel <Philip.Hazel@gmail.com> Date: Sat, 3 Aug 2024 17:18:56 +0100 Subject: [PATCH] Remove incorrect optimization in DFA matching when partial matching and (*F) are involved Conflict:don't modify ChangeLog; adapt context Reference:https://github.com/PCRE2Project/pcre2/commit/674b6640e702705e8e90125f972197fae3aa364d --- src/pcre2_dfa_match.c | 10 +--------- testdata/testinput6 | 9 +++++++++ testdata/testoutput6 | 13 +++++++++++++ 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/pcre2_dfa_match.c b/src/pcre2_dfa_match.c index 60f6b4f..1c4495f 100644 --- a/src/pcre2_dfa_match.c +++ b/src/pcre2_dfa_match.c @@ -7,7 +7,7 @@ and semantics are as close as possible to those of the Perl 5 language. Written by Philip Hazel Original API code Copyright (c) 1997-2012 University of Cambridge - New API code Copyright (c) 2016-2022 University of Cambridge + New API code Copyright (c) 2016-2024 University of Cambridge ----------------------------------------------------------------------------- Redistribution and use in source and binary forms, with or without @@ -693,7 +693,6 @@ for (;;) int i, j; int clen, dlen; uint32_t c, d; - int forced_fail = 0; BOOL partial_newline = FALSE; BOOL could_continue = reset_could_continue; reset_could_continue = FALSE; @@ -2765,7 +2764,6 @@ for (;;) though the other "backtracking verbs" are not supported. */ case OP_FAIL: - forced_fail++; /* Count FAILs for multiple states */ break; case OP_ASSERT: @@ -3247,18 +3245,12 @@ for (;;) matches that we are going to find. If partial matching has been requested, check for appropriate conditions. - The "forced_ fail" variable counts the number of (*F) encountered for the - character. If it is equal to the original active_count (saved in - workspace[1]) it means that (*F) was found on every active state. In this - case we don't want to give a partial match. - The "could_continue" variable is true if a state could have continued but for the fact that the end of the subject was reached. */ if (new_count <= 0) { if (could_continue && /* Some could go on, and */ - forced_fail != workspace[1] && /* Not all forced fail & */ ( /* either... */ (mb->moptions & PCRE2_PARTIAL_HARD) != 0 /* Hard partial */ || /* or... */ diff --git a/testdata/testinput6 b/testdata/testinput6 index 0ca0d23..b71a69c 100644 --- a/testdata/testinput6 +++ b/testdata/testinput6 @@ -4392,9 +4392,18 @@ /Z(*F)Q|ZXY/ Z\=ps + XY\=dfa_restart \= Expect no match ZA\=ps X\=ps + +/Z(?:(*F)Q|XY)/ + Z\=ps + XY\=dfa_restart + +/Z(*F)Q|Z(*F)XY/ +\= Expect no match + Z\=ps /\bthe cat\b/ the cat\=ps diff --git a/testdata/testoutput6 b/testdata/testoutput6 index 607b572..38c653e 100644 --- a/testdata/testoutput6 +++ b/testdata/testoutput6 @@ -6769,11 +6769,24 @@ Partial match: dogs /Z(*F)Q|ZXY/ Z\=ps Partial match: Z + XY\=dfa_restart + 0: XY \= Expect no match ZA\=ps No match X\=ps No match + +/Z(?:(*F)Q|XY)/ + Z\=ps +Partial match: Z + XY\=dfa_restart + 0: XY + +/Z(*F)Q|Z(*F)XY/ +\= Expect no match + Z\=ps +No match /\bthe cat\b/ the cat\=ps -- 2.43.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2