From e4485b5c3bd9de9ad7d5caacbc36164479696def Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20Mengu=C3=A9?= Date: Thu, 31 Mar 2016 22:53:06 +0200 Subject: Return early in case of invalid $source ... to avoid calling lexalias with undef instead of a coderef. --- lib/Eval/Closure.pm | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/lib/Eval/Closure.pm b/lib/Eval/Closure.pm index 51a6c00..3b7c0ee 100644 --- a/lib/Eval/Closure.pm +++ b/lib/Eval/Closure.pm @@ -200,15 +200,23 @@ sub _clean_eval_closure { } my ($compiler, $e) = _make_compiler($source, $alias, @capture_keys); - my $code; - if (defined $compiler) { - $code = $compiler->(@$captures{@capture_keys}); - } + return (undef, $e) unless defined $compiler; + + my $code = $compiler->(@$captures{@capture_keys}); - if (defined($code) && (!ref($code) || ref($code) ne 'CODE')) { - $e = "The 'source' parameter must return a subroutine reference, " - . "not $code"; - undef $code; + if (!defined $code) { + return ( + undef, + "The 'source' parameter must return a subroutine reference, " + . "not undef" + ) + } + if (!ref($code) || ref($code) ne 'CODE') { + return ( + undef, + "The 'source' parameter must return a subroutine reference, not " + . ref($code) + ) } if ($alias) { -- cgit v1.2.3