Serious Exception-Handling Bug Fixed in DBIx::Connector 0.42
I’ve just released
DBIx::Connector 0.42 to CPAN. This release fixes a serious bug with catch blocks.
In short, if you threw an exception from inside a catch block, it would not be
detectable from outside. For example, given this code:
eval {
$conn->run(sub { die 'WTF' }, catch => sub { die 'OMG!' });
};
if (my $err = $@) {
say "We got an error: $@\n";
}
With DBIx::Connector 0.41 and lower, the if block would never be called,
because even though the catch block threw an exception, $@ was not set. In
other words, the exception would not be propagated to its caller. This could
be terribly annoying, as you can imagine. I was being a bit too clever about
localizing $@, with the scope much too broad. 0.42 uses a much tighter scope
to localize $@, so now it should propagate properly everywhere.
So if you’re using DBIx::Connector catch blocks, please upgrade ASAP. Sorry
for the hassle.
Backtalk
Jakub Narębski wrote: