This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regcomp.c: calculate variants instead of assuming worst case
authorKarl Williamson <khw@cpan.org>
Thu, 8 Nov 2018 03:20:53 +0000 (20:20 -0700)
committerKarl Williamson <khw@cpan.org>
Fri, 16 Nov 2018 16:34:38 +0000 (09:34 -0700)
commita4b8f4b4b34c2038e6b9fbd77849f6f99e527be0
tree536f92dc56103271e59e6169937e30b8286a0ae0
parentd466271924da8273f92ecba0e715287a7d7582ac
regcomp.c: calculate variants instead of assuming worst case

When converting a byte pattern to UTF-8, the needed size may increase due
to some bytes (the UTF-8 variants) occupying two bytes instead of one
under UTF-8.

Prior to this commit, the pattern was assumed to contain only variants,
and enough memory was allocated for the worst case.

This commit actually calculates how much space is needed and allocates
only that.

There is extra work involved in doing this calculation.  But the pattern
is parsed per-word.  For short strings, it doesn't much matter either
way.  But for very long strings, it seems to me the consequences of
potentially allocating way too much memory out weighs the negative of
this extra work.  If field experience proves me wrong, then revert this
commit.
regcomp.c