]> granicus.if.org Git - postgresql/commit
Change regexp engine's ccondissect/crevdissect routines to perform DFA
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 1 Feb 2010 02:45:46 +0000 (02:45 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 1 Feb 2010 02:45:46 +0000 (02:45 +0000)
commit46b6fbc9b4dc677419c4495e8f78182d6ae2e91c
tree8a2cbe1e882a14ce172c2308aeb70f337821fe03
parent27554860c087ff249a853e4622be4580c2fda0d9
Change regexp engine's ccondissect/crevdissect routines to perform DFA
matching before recursing instead of after.  The DFA match eliminates
unworkable midpoint choices a lot faster than the recursive check, in most
cases, so doing it first can speed things up; particularly in pathological
cases such as recently exhibited by Michael Glaesemann.

In addition, apply some cosmetic changes that were applied upstream (in the
Tcl project) at the same time, in order to sync with upstream version 1.15
of regexec.c.

Upstream apparently intends to backpatch this, so I will too.  The
pathological behavior could be unpleasant if encountered in the field,
which seems to justify any risk of introducing new bugs.

Tom Lane, reviewed by Donal K. Fellows of Tcl project
src/backend/regex/regexec.c