Re: Pathological regexp match
Magnus Hagander <magnus@hagander.net>
From: Magnus Hagander <magnus@hagander.net>
To: Alvaro Herrera <alvherre@commandprompt.com>
Cc: Michael Glaesemann <michael.glaesemann@myyearbook.com>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2010-01-29T13:14:22Z
Lists: pgsql-hackers
2010/1/29 Alvaro Herrera <alvherre@commandprompt.com>: > Hi Michael, > > Michael Glaesemann wrote: >> We came across a regexp that takes very much longer than expected. >> >> PostgreSQL 8.4.1 on x86_64-unknown-linux-gnu, compiled by GCC gcc (GCC) 4.1.2 20080704 (Red Hat 4.1.2-44), 64-bit >> >> SELECT 'ooo...' ~ $r$Z(Q)[^Q]*A.*?(\1)$r$; -- omitted for email brevity > > The ? after .* is pointless. If you remove it, the query returns > immediately. > > (There's a badly needed CHECK_FOR_INTERRUPTS in this code BTW) Incidentally, I ran across the exact same issue with a non-greedy regexp with a client earlier this week, and put on my TODO to figure out a good place to stick a check for interrupts. Does this mean I don't have to, because you're on it? ;) -- Magnus Hagander Me: http://www.hagander.net/ Work: http://www.redpill-linpro.com/