pgsql: Improve performance of pullback/pushfwd in regular-expression co

Поиск
Список
Период
Сортировка
От Tom Lane
Тема pgsql: Improve performance of pullback/pushfwd in regular-expression co
Дата
Msg-id E1ZnB7A-0005ht-8R@gemulon.postgresql.org
обсуждение исходный текст
Список pgsql-committers
Improve performance of pullback/pushfwd in regular-expression compiler.

The previous coding would create a new intermediate state every time it
wanted to interchange the ordering of two constraint arcs.  Certain regex
features such as \Y can generate large numbers of parallel constraint arcs,
and if we needed to reorder the results of that, we created unreasonable
numbers of intermediate states.  To improve matters, keep a list of
already-created intermediate states associated with the state currently
being considered by the outer loop; we can re-use such states to place all
the new arcs leading to the same destination or source.

I also took the trouble to redefine push() and pull() to have a less risky
API: they no longer delete any state or arc that the caller might possibly
have a pointer to, except for the specifically-passed constraint arc.
This reduces the risk of re-introducing the same type of error seen in
the failed patch for CVE-2007-4772.

Back-patch to all supported branches.

Branch
------
REL9_4_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/9774fda86866fb12c8d690cb754e3981dc45efcd

Modified Files
--------------
src/backend/regex/regc_nfa.c |  150 ++++++++++++++++++++++++++++++++----------
src/backend/regex/regcomp.c  |    4 +-
2 files changed, 119 insertions(+), 35 deletions(-)


В списке pgsql-committers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: pgsql: Fix regular-expression compiler to handle loops of constraint ar
Следующее
От: Tom Lane
Дата:
Сообщение: pgsql: Fix O(N^2) performance problems in regular-expression compiler.