forked frompostgres/postgres
- Notifications
You must be signed in to change notification settings - Fork6
Commit57a2d4a
committed
Fix performance bug in regexp's citerdissect/creviterdissect.
After detecting a sub-match "dissect" failure (i.e., a backref matchfailure) in the i'th sub-match of an iteration node, we should proceedby 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 wouldthey back up to adjust the next-to-last sub-match, and then thesecond-from-last, etc; all of which is wasted effort, since onlychanging the start or length of the i'th sub-match can possibly makeit succeed. This oversight creates the possibility for exponentiallybad performance. Fortunately the problem is masked in most cases byoptimizations or constraints applied elsewhere; which explains whywe'd not noticed it before. But it is possible to reach the problemwith fairly simple, if contrived, regexps.Oversight in my commit173e29a. That's pretty ancient now,so back-patch to all supported branches.Discussion:https://postgr.es/m/1808998.1629412269@sss.pgh.pa.us1 parent92ce7f5 commit57a2d4a
1 file changed
+10
-8
lines changedLines changed: 10 additions & 8 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
1133 | 1133 |
| |
1134 | 1134 |
| |
1135 | 1135 |
| |
1136 |
| - | |
1137 |
| - | |
| 1136 | + | |
| 1137 | + | |
1138 | 1138 |
| |
1139 | 1139 |
| |
1140 | 1140 |
| |
| |||
1222 | 1222 |
| |
1223 | 1223 |
| |
1224 | 1224 |
| |
1225 |
| - | |
| 1225 | + | |
| 1226 | + | |
1226 | 1227 |
| |
1227 | 1228 |
| |
1228 | 1229 |
| |
1229 | 1230 |
| |
1230 |
| - | |
| 1231 | + | |
1231 | 1232 |
| |
1232 | 1233 |
| |
1233 | 1234 |
| |
| |||
1338 | 1339 |
| |
1339 | 1340 |
| |
1340 | 1341 |
| |
1341 |
| - | |
1342 |
| - | |
| 1342 | + | |
| 1343 | + | |
1343 | 1344 |
| |
1344 | 1345 |
| |
1345 | 1346 |
| |
| |||
1433 | 1434 |
| |
1434 | 1435 |
| |
1435 | 1436 |
| |
1436 |
| - | |
| 1437 | + | |
| 1438 | + | |
1437 | 1439 |
| |
1438 | 1440 |
| |
1439 | 1441 |
| |
1440 | 1442 |
| |
1441 |
| - | |
| 1443 | + | |
1442 | 1444 |
| |
1443 | 1445 |
| |
1444 | 1446 |
| |
|
0 commit comments
Comments
(0)