- Notifications
You must be signed in to change notification settings - Fork4.9k
Commit54b116d
committed
Add recursion depth protections to regular expression matching.
Some of the functions in regex compilation and execution recurse, andtherefore could in principle be driven to stack overflow. The Tcl crewhas seen this happen in practice in duptraverse(), though their fix wasto put in a hard-wired limit on the number of recursive levels, which isnot too appetizing --- fortunately, we have enough infrastructure to checkthe actually available stack. Greg Stark has also seen it in other placeswhile fuzz testing on a machine with limited stack space. Let's put guardsin to prevent crashes in all these places.Since the regex code would leak memory if we simply threw elog(ERROR),we have to introduce an API that checks for stack depth without throwingsuch an error. Fortunately that's not difficult.1 parent2a88782 commit54b116d
File tree
7 files changed
+128
-25
lines changed- src
- backend
- regex
- tcop
- include
- regex
7 files changed
+128
-25
lines changedLines changed: 61 additions & 7 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
683 | 683 |
| |
684 | 684 |
| |
685 | 685 |
| |
| 686 | + | |
| 687 | + | |
686 | 688 |
| |
687 | 689 |
| |
688 | 690 |
| |
| |||
702 | 704 |
| |
703 | 705 |
| |
704 | 706 |
| |
| 707 | + | |
| 708 | + | |
| 709 | + | |
| 710 | + | |
| 711 | + | |
| 712 | + | |
| 713 | + | |
705 | 714 |
| |
706 | 715 |
| |
707 | 716 |
| |
| |||
713 | 722 |
| |
714 | 723 |
| |
715 | 724 |
| |
| 725 | + | |
| 726 | + | |
716 | 727 |
| |
717 | 728 |
| |
718 | 729 |
| |
| |||
767 | 778 |
| |
768 | 779 |
| |
769 | 780 |
| |
| 781 | + | |
| 782 | + | |
| 783 | + | |
| 784 | + | |
| 785 | + | |
| 786 | + | |
| 787 | + | |
770 | 788 |
| |
771 | 789 |
| |
772 | 790 |
| |
| |||
796 | 814 |
| |
797 | 815 |
| |
798 | 816 |
| |
| 817 | + | |
| 818 | + | |
| 819 | + | |
| 820 | + | |
| 821 | + | |
| 822 | + | |
| 823 | + | |
799 | 824 |
| |
800 | 825 |
| |
801 | 826 |
| |
| |||
1284 | 1309 |
| |
1285 | 1310 |
| |
1286 | 1311 |
| |
1287 |
| - | |
| 1312 | + | |
1288 | 1313 |
| |
1289 | 1314 |
| |
1290 | 1315 |
| |
| |||
1342 | 1367 |
| |
1343 | 1368 |
| |
1344 | 1369 |
| |
1345 |
| - | |
| 1370 | + | |
1346 | 1371 |
| |
1347 | 1372 |
| |
1348 |
| - | |
| 1373 | + | |
| 1374 | + | |
| 1375 | + | |
1349 | 1376 |
| |
1350 | 1377 |
| |
1351 | 1378 |
| |
| 1379 | + | |
| 1380 | + | |
| 1381 | + | |
| 1382 | + | |
| 1383 | + | |
| 1384 | + | |
| 1385 | + | |
1352 | 1386 |
| |
1353 | 1387 |
| |
1354 | 1388 |
| |
1355 | 1389 |
| |
1356 | 1390 |
| |
1357 |
| - | |
| 1391 | + | |
1358 | 1392 |
| |
1359 | 1393 |
| |
1360 | 1394 |
| |
| |||
1433 | 1467 |
| |
1434 | 1468 |
| |
1435 | 1469 |
| |
| 1470 | + | |
| 1471 | + | |
| 1472 | + | |
1436 | 1473 |
| |
1437 | 1474 |
| |
1438 | 1475 |
| |
1439 | 1476 |
| |
1440 |
| - | |
| 1477 | + | |
1441 | 1478 |
| |
1442 | 1479 |
| |
1443 | 1480 |
| |
1444 | 1481 |
| |
1445 | 1482 |
| |
1446 |
| - | |
| 1483 | + | |
1447 | 1484 |
| |
1448 |
| - | |
| 1485 | + | |
1449 | 1486 |
| |
1450 | 1487 |
| |
1451 | 1488 |
| |
| |||
1466 | 1503 |
| |
1467 | 1504 |
| |
1468 | 1505 |
| |
| 1506 | + | |
| 1507 | + | |
| 1508 | + | |
| 1509 | + | |
| 1510 | + | |
| 1511 | + | |
| 1512 | + | |
1469 | 1513 |
| |
1470 | 1514 |
| |
1471 | 1515 |
| |
| |||
1485 | 1529 |
| |
1486 | 1530 |
| |
1487 | 1531 |
| |
| 1532 | + | |
| 1533 | + | |
| 1534 | + | |
| 1535 | + | |
| 1536 | + | |
| 1537 | + | |
| 1538 | + | |
1488 | 1539 |
| |
1489 | 1540 |
| |
1490 | 1541 |
| |
| |||
1502 | 1553 |
| |
1503 | 1554 |
| |
1504 | 1555 |
| |
| 1556 | + | |
| 1557 | + | |
| 1558 | + | |
1505 | 1559 |
| |
1506 | 1560 |
| |
1507 | 1561 |
| |
|
Lines changed: 31 additions & 3 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
34 | 34 |
| |
35 | 35 |
| |
36 | 36 |
| |
37 |
| - | |
| 37 | + | |
38 | 38 |
| |
39 | 39 |
| |
40 | 40 |
| |
| |||
70 | 70 |
| |
71 | 71 |
| |
72 | 72 |
| |
| 73 | + | |
73 | 74 |
| |
74 | 75 |
| |
75 | 76 |
| |
| |||
152 | 153 |
| |
153 | 154 |
| |
154 | 155 |
| |
155 |
| - | |
| 156 | + | |
156 | 157 |
| |
157 | 158 |
| |
158 | 159 |
| |
| |||
277 | 278 |
| |
278 | 279 |
| |
279 | 280 |
| |
280 |
| - | |
| 281 | + | |
| 282 | + | |
281 | 283 |
| |
282 | 284 |
| |
283 | 285 |
| |
| |||
1602 | 1604 |
| |
1603 | 1605 |
| |
1604 | 1606 |
| |
| 1607 | + | |
| 1608 | + | |
| 1609 | + | |
| 1610 | + | |
| 1611 | + | |
| 1612 | + | |
| 1613 | + | |
| 1614 | + | |
| 1615 | + | |
| 1616 | + | |
1605 | 1617 |
| |
1606 | 1618 |
| |
1607 | 1619 |
| |
| |||
1914 | 1926 |
| |
1915 | 1927 |
| |
1916 | 1928 |
| |
| 1929 | + | |
| 1930 | + | |
| 1931 | + | |
| 1932 | + | |
| 1933 | + | |
| 1934 | + | |
| 1935 | + | |
| 1936 | + | |
| 1937 | + | |
| 1938 | + | |
| 1939 | + | |
| 1940 | + | |
| 1941 | + | |
| 1942 | + | |
| 1943 | + | |
| 1944 | + | |
1917 | 1945 |
| |
1918 | 1946 |
| |
1919 | 1947 |
| |
|
Lines changed: 7 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
628 | 628 |
| |
629 | 629 |
| |
630 | 630 |
| |
| 631 | + | |
| 632 | + | |
| 633 | + | |
| 634 | + | |
| 635 | + | |
| 636 | + | |
| 637 | + | |
631 | 638 |
| |
632 | 639 |
| |
633 | 640 |
| |
|
Lines changed: 3 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
746 | 746 |
| |
747 | 747 |
| |
748 | 748 |
| |
| 749 | + | |
| 750 | + | |
| 751 | + | |
749 | 752 |
| |
750 | 753 |
| |
751 | 754 |
| |
|
Lines changed: 21 additions & 15 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
3103 | 3103 |
| |
3104 | 3104 |
| |
3105 | 3105 |
| |
3106 |
| - | |
| 3106 | + | |
3107 | 3107 |
| |
3108 | 3108 |
| |
3109 | 3109 |
| |
3110 | 3110 |
| |
3111 | 3111 |
| |
| 3112 | + | |
| 3113 | + | |
| 3114 | + | |
3112 | 3115 |
| |
3113 | 3116 |
| |
3114 | 3117 |
| |
| 3118 | + | |
| 3119 | + | |
| 3120 | + | |
| 3121 | + | |
| 3122 | + | |
| 3123 | + | |
| 3124 | + | |
| 3125 | + | |
| 3126 | + | |
| 3127 | + | |
| 3128 | + | |
| 3129 | + | |
| 3130 | + | |
3115 | 3131 |
| |
3116 | 3132 |
| |
3117 | 3133 |
| |
| |||
3137 | 3153 |
| |
3138 | 3154 |
| |
3139 | 3155 |
| |
3140 |
| - | |
3141 |
| - | |
3142 |
| - | |
3143 |
| - | |
3144 |
| - | |
3145 |
| - | |
3146 |
| - | |
| 3156 | + | |
3147 | 3157 |
| |
3148 | 3158 |
| |
3149 | 3159 |
| |
| |||
3158 | 3168 |
| |
3159 | 3169 |
| |
3160 | 3170 |
| |
3161 |
| - | |
3162 |
| - | |
3163 |
| - | |
3164 |
| - | |
3165 |
| - | |
3166 |
| - | |
3167 |
| - | |
| 3171 | + | |
3168 | 3172 |
| |
| 3173 | + | |
| 3174 | + | |
3169 | 3175 |
| |
3170 | 3176 |
| |
3171 | 3177 |
| |
|
Lines changed: 1 addition & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
261 | 261 |
| |
262 | 262 |
| |
263 | 263 |
| |
| 264 | + | |
264 | 265 |
| |
265 | 266 |
| |
266 | 267 |
| |
|
Lines changed: 4 additions & 0 deletions
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
404 | 404 |
| |
405 | 405 |
| |
406 | 406 |
| |
| 407 | + | |
407 | 408 |
| |
408 | 409 |
| |
409 | 410 |
| |
410 | 411 |
| |
411 | 412 |
| |
| 413 | + | |
| 414 | + | |
| 415 | + | |
412 | 416 |
| |
413 | 417 |
| |
414 | 418 |
| |
|
0 commit comments
Comments
(0)