On 2015-08-30 00:02, Bastien ROUCARIES wrote: > On Sat, Aug 29, 2015 at 10:31 PM, David Prévot <taf...@debian.org> wrote: >> [...] >> >>> I get quite some warnings from perl: >>> Complex regular subexpression recursion limit (32766) exceeded at >>> /usr/share/lintian/checks/cruft.pm line 939. > > it is the remove comments regex from perlfaq .... > # from perl faq strip comments > $strip > =~ > s#/\*[^*]*\*+([^/*][^*]*\*+)*/|//([^\\]|[^\n][\n]?)*?(?=\n)|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*)#defined > $3 ? $3 : ""#gse; > > How can I solve this ? > > Bastien >
It is not certain we can solve it in pure Perl. The Perl "Regex" engine (like many other languages's) is not a regular expression. This means we can exponential runtime for expressions, where a true regular expression could do it in polynomial time[1]. We can try to help Perl by reducing the points where this can do a backtrack (By using *+, where possibly to forbid backtracking). Alternatively, we can reduce the input size. But if that does not work, we will have to remove the regex or replace it with a simpler one. Though, be careful with *+ (and ?+) as it can subtly change the regex to no longer match where the old one could. Anyway, be careful in general with adding any non-trivial regex. Thanks, ~Niels [1] https://swtch.com/~rsc/regexp/regexp1.html Do note that the graph for Thompson NFA is measured in "us", while the perl graph is in "s".
signature.asc
Description: OpenPGP digital signature