Skip to content
Snippets Groups Projects
Commit 2f14d1bb authored by Martin von Zweigbergk's avatar Martin von Zweigbergk
Browse files

match: remove obsolete catching of OverflowError

Since 0f6a1bdf89fb (match: handle large regexes, 2007-08-19), we catch
an OverflowError from the regex engine and split up the regex if that
happens. In 59a9dc9562e2 (ignore: split up huge patterns, 2008-02-11),
that was extended to raise an OverflowError in our code even if the
regex engine doesn't raise it. It's unclear if there was a range of
regex sizes where the OverflowError would be raised from the regex
engine but that were still below the limit we added in our
code. Either way, both limitations were probably removed in Python
2.7.4 when the regex code width was extended from 16bit to 32bit (or
Py_UCS4) integer (thanks to Yuya for finding that out).

If at least the first limitation was removed, we no longer should be
using OverflowError for flow control, so this patch changes that.

Differential Revision: https://phab.mercurial-scm.org/D5309
parent c85964d7
No related branches found
No related tags found
No related merge requests found
......@@ -1190,12 +1190,10 @@
try:
regex = '(?:%s)' % '|'.join([_regex(k, p, globsuffix)
for (k, p, s) in kindpats])
if len(regex) > 20000:
raise OverflowError
return regex, _rematcher(regex)
except OverflowError:
if len(regex) <= 20000:
return regex, _rematcher(regex)
# We're using a Python with a tiny regex engine and we
# made it explode, so we'll divide the pattern list in two
# until it works
l = len(kindpats)
if l < 2:
......@@ -1197,9 +1195,10 @@
# We're using a Python with a tiny regex engine and we
# made it explode, so we'll divide the pattern list in two
# until it works
l = len(kindpats)
if l < 2:
raise
# TODO: raise error.Abort here
raise OverflowError
regexa, a = _buildregexmatch(kindpats[:l//2], globsuffix)
regexb, b = _buildregexmatch(kindpats[l//2:], globsuffix)
return regex, lambda s: a(s) or b(s)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment