in reply to FPE not deferred in 5.36

I ran into a FPE once.... and while I've not dug into the details, I can give a somewhat dirty way to reproduce it. It is dirty because the bug causing the FPE has been fixed since then. Here's the code:

$SIG{FPE} = sub { die "Ooops\n" }; use List::Util 'product'; print product(-1,1);

If you run this in vanilla Perl 5.34 or older without a signal handler, it dies with Floating point exception. If you include the handler like I did, you'll get:

Maximal count of pending signals (120) exceeded at line 3.

If you run this in vanilla Perl 5.36, you get the expected result of -1, because the bug (RT139601) has been fixed in that release (in List::Util 1.60, to be precise). But you can catch the FPE by installing an "older" List::Util on top of Perl 5.36:

cpanm +ls-1.59.tar.gz perl

This dies with the message Ooops, so in Perl 5.36 the signal handler works as you'd expect.

Don't forget to upgrade your List::Util after that test :)

Replies are listed 'Best First'.
Re^2: FPE not deferred in 5.36
by choroba (Cardinal) on May 31, 2022 at 15:01 UTC
    Great, thanks. I'll dig into the older List::Util to see how the error happens, as I don't want to install an older version of a core module in the test suite of Syntax::Construct :-)

    map{substr$_->[0],$_->[1]||0,1}[\*||{},3],[[]],[ref qr-1,-,-1],[{}],[sub{}^*ARGV,3]