From 2408e9e4af7331131142553b71c7aa63c28d0358 Mon Sep 17 00:00:00 2001 From: David COUTADEUR Date: Mon, 17 Mar 2014 14:38:22 +0000 Subject: [PATCH] - fix commit 3268: the jail_reval function must handle more cases (references #630) --- .../Lemonldap/NG/Handler/Initialization/GlobalInit.pm | 4 ++-- .../lib/Lemonldap/NG/Handler/Main/Jail.pm | 11 +++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Initialization/GlobalInit.pm b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Initialization/GlobalInit.pm index 8b4d8a669..684157a6b 100755 --- a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Initialization/GlobalInit.pm +++ b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Initialization/GlobalInit.pm @@ -277,7 +277,7 @@ sub forgeHeadersInit { ); $self->safe( $jail->build_safe() ); $forgeHeaders->{$alias} = - $jail->jail_reval( $sub ); + $jail->jail_reval( "sub{$sub}" ); Lemonldap::NG::Handler::Main::Logger->lmLog( "$self: Unable to forge headers: $@: sub {$sub}", 'error' ) @@ -475,7 +475,7 @@ sub conditionSub { 'customFunctions' => $self->customFunctions ); $self->safe( $jail->build_safe() ); - my $sub = $jail->jail_reval( $cond ); + my $sub = $jail->jail_reval( "sub{return($cond)}" ); # Return sub and protected flag return ( $sub, 0 ); diff --git a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Jail.pm b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Jail.pm index c72e68931..9603bca99 100755 --- a/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Jail.pm +++ b/lemonldap-ng-handler/lib/Lemonldap/NG/Handler/Main/Jail.pm @@ -119,10 +119,17 @@ sub share_from { sub jail_reval { my ( $self, $reval ) = splice @_; + # if nothing is returned by reval, add the return statement to + # the "no safe wrap" reval + my $nosw_reval = $reval; + if ( $reval !~ /^sub\{return\(.*\}$/ ) { + $nosw_reval =~ s/^sub{(.*)}$/sub{return($1)}/ + } + return ( SAFEWRAP - ? $self->safe->wrap_code_ref( $self->safe->reval("sub{$reval}") ) - : $self->safe->reval("sub{return($reval)}") + ? $self->safe->wrap_code_ref( $self->safe->reval($reval) ) + : $self->safe->reval($nosw_reval) ); }