Security Advisories (1)
CVE-2026-8376 (2026-05-25)

Perl versions through 5.43.10 have a heap buffer overflow when compiling regular expressions with a repeated fixed string on 32-bit builds. Perl_study_chunk in regcomp_study.c checked the size of the joined substring buffer in characters rather than bytes. For a quantified fixed substring with a large minimum count, the byte length mincount * l could overflow SSize_t, producing an undersized SvGROW allocation; the subsequent copy writes past the end of the buffer. A caller that compiles an attacker-controlled regular expression on a 32-bit perl build triggers a heap buffer overflow at compile time.

f_map.t

Code test snippets here are adapted from `perldoc -f map`

# chunk: #!perl # examples shamelessly snatched from perldoc -f map

# chunk: # translates a list of numbers to the corresponding characters. @chars = map(chr, @nums);

# chunk: %hash = map { getkey($_) => $_ } @array;

# chunk: { %hash = (); foreach $_ (@array) { $hash{getkey($_)} = $_; } }

# chunk: #%hash = map { "\L$_", 1 } @array; # perl guesses EXPR. wrong %hash = map { +"\L$_", 1 } @array; # perl guesses BLOCK. right

# chunk: %hash = map { ("\L$_", 1) } @array; # this also works

# chunk: %hash = map { lc($_), 1 } @array; # as does this.

# chunk: %hash = map +( lc($_), 1 ), @array; # this is EXPR and works!

# chunk: %hash = map ( lc($_), 1 ), @array; # evaluates to (1, @array)

# chunk: @hashes = map +{ lc($_), 1 }, @array # EXPR, so needs , at end