pgsql: Fix performance bug in regexp's citerdissect/creviterdissect.
От | Tom Lane |
---|---|
Тема | pgsql: Fix performance bug in regexp's citerdissect/creviterdissect. |
Дата | |
Msg-id | E1mH96y-0006Ly-FQ@gemulon.postgresql.org обсуждение исходный текст |
Список | pgsql-committers |
Fix performance bug in regexp's citerdissect/creviterdissect. After detecting a sub-match "dissect" failure (i.e., a backref match failure) in the i'th sub-match of an iteration node, we should proceed by adjusting the attempted length of the i'th submatch. As coded, though, these functions changed the attempted length of the *last* sub-match, and only after exhausting all possibilities for that would they back up to adjust the next-to-last sub-match, and then the second-from-last, etc; all of which is wasted effort, since only changing the start or length of the i'th sub-match can possibly make it succeed. This oversight creates the possibility for exponentially bad performance. Fortunately the problem is masked in most cases by optimizations or constraints applied elsewhere; which explains why we'd not noticed it before. But it is possible to reach the problem with fairly simple, if contrived, regexps. Oversight in my commit 173e29aa5. That's pretty ancient now, so back-patch to all supported branches. Discussion: https://postgr.es/m/1808998.1629412269@sss.pgh.pa.us Branch ------ REL_14_STABLE Details ------- https://git.postgresql.org/pg/commitdiff/57a2d4a1b3bb48ec422a2701f8df026123a98a27 Modified Files -------------- src/backend/regex/regexec.c | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-)
В списке pgsql-committers по дате отправления: