Commit ce565cd
authored
[Bug #20653] Fix memory leak in String#start_with? when regexp times out (ruby#11255)
Fix memory leak in String#start_with? when regexp times out
[Bug #20653]
This commit refactors how Onigmo handles timeout. Instead of raising a
timeout error, onig_search will return a ONIGERR_TIMEOUT which the
caller can free memory, and then raise a timeout error.
This fixes a memory leak in String#start_with when the regexp times out.
For example:
regex = Regexp.new("^#{"(a*)" * 10_000}x$", timeout: 0.000001)
str = "a" * 1000000 + "x"
10.times do
100.times do
str.start_with?(regex)
rescue
end
puts `ps -o rss= -p #{$$}`
end
Before:
33216
51936
71152
81728
97152
103248
120384
133392
133520
133616
After:
14912
15376
15824
15824
16128
16128
16144
16144
16160
161601 parent 6d74483 commit ce565cd
4 files changed
+32
-54
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1671 | 1671 | | |
1672 | 1672 | | |
1673 | 1673 | | |
1674 | | - | |
| 1674 | + | |
| 1675 | + | |
| 1676 | + | |
| 1677 | + | |
| 1678 | + | |
| 1679 | + | |
1675 | 1680 | | |
1676 | 1681 | | |
1677 | 1682 | | |
| 1683 | + | |
1678 | 1684 | | |
1679 | 1685 | | |
1680 | 1686 | | |
| |||
1735 | 1741 | | |
1736 | 1742 | | |
1737 | 1743 | | |
1738 | | - | |
1739 | | - | |
1740 | | - | |
1741 | | - | |
1742 | | - | |
1743 | | - | |
1744 | | - | |
1745 | | - | |
1746 | | - | |
1747 | | - | |
1748 | | - | |
1749 | | - | |
1750 | | - | |
1751 | | - | |
1752 | | - | |
1753 | | - | |
1754 | | - | |
1755 | 1744 | | |
1756 | 1745 | | |
1757 | 1746 | | |
| |||
1762 | 1751 | | |
1763 | 1752 | | |
1764 | 1753 | | |
1765 | | - | |
1766 | | - | |
1767 | | - | |
1768 | | - | |
1769 | | - | |
1770 | | - | |
1771 | | - | |
1772 | | - | |
| 1754 | + | |
| 1755 | + | |
| 1756 | + | |
1773 | 1757 | | |
| 1758 | + | |
1774 | 1759 | | |
1775 | | - | |
1776 | | - | |
1777 | | - | |
1778 | | - | |
1779 | | - | |
1780 | | - | |
1781 | | - | |
1782 | | - | |
1783 | | - | |
1784 | | - | |
1785 | | - | |
1786 | | - | |
1787 | | - | |
| 1760 | + | |
1788 | 1761 | | |
1789 | | - | |
| 1762 | + | |
1790 | 1763 | | |
1791 | 1764 | | |
1792 | 1765 | | |
1793 | 1766 | | |
1794 | 1767 | | |
1795 | 1768 | | |
1796 | | - | |
| 1769 | + | |
1797 | 1770 | | |
1798 | 1771 | | |
1799 | 1772 | | |
| |||
1810 | 1783 | | |
1811 | 1784 | | |
1812 | 1785 | | |
1813 | | - | |
| 1786 | + | |
1814 | 1787 | | |
1815 | 1788 | | |
1816 | 1789 | | |
| |||
4672 | 4645 | | |
4673 | 4646 | | |
4674 | 4647 | | |
4675 | | - | |
4676 | | - | |
4677 | | - | |
4678 | | - | |
4679 | | - | |
4680 | | - | |
4681 | 4648 | | |
4682 | 4649 | | |
4683 | 4650 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
5575 | 5575 | | |
5576 | 5576 | | |
5577 | 5577 | | |
5578 | | - | |
5579 | | - | |
| 5578 | + | |
5580 | 5579 | | |
5581 | 5580 | | |
5582 | 5581 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
163 | 163 | | |
164 | 164 | | |
165 | 165 | | |
166 | | - | |
167 | | - | |
168 | | - | |
169 | 166 | | |
170 | 167 | | |
171 | 168 | | |
| |||
1002 | 999 | | |
1003 | 1000 | | |
1004 | 1001 | | |
1005 | | - | |
1006 | 1002 | | |
1007 | 1003 | | |
1008 | 1004 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2010 | 2010 | | |
2011 | 2011 | | |
2012 | 2012 | | |
| 2013 | + | |
| 2014 | + | |
| 2015 | + | |
| 2016 | + | |
| 2017 | + | |
| 2018 | + | |
| 2019 | + | |
| 2020 | + | |
| 2021 | + | |
| 2022 | + | |
| 2023 | + | |
| 2024 | + | |
| 2025 | + | |
| 2026 | + | |
| 2027 | + | |
| 2028 | + | |
2013 | 2029 | | |
2014 | 2030 | | |
2015 | 2031 | | |
| |||
0 commit comments