From: Peter Rabbitson Date: Mon, 6 Jun 2016 12:59:44 +0000 (+0200) Subject: And yet another INDIRECT guard missed in both e5053694 and d99f2db7 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=3b0202245e84a09a41ac31a13b80547a300a227e;p=dbsrgits%2FDBIx-Class.git And yet another INDIRECT guard missed in both e5053694 and d99f2db7 --- diff --git a/lib/DBIx/Class/ResultSource.pm b/lib/DBIx/Class/ResultSource.pm index eb56b01..c51c45d 100644 --- a/lib/DBIx/Class/ResultSource.pm +++ b/lib/DBIx/Class/ResultSource.pm @@ -804,6 +804,8 @@ See also L. =cut sub add_unique_constraints { + DBIx::Class::_ENV_::ASSERT_NO_INTERNAL_INDIRECT_CALLS and fail_on_internal_call; + my $self = shift; my @constraints = @_; diff --git a/lib/DBIx/Class/_Util.pm b/lib/DBIx/Class/_Util.pm index 11034e2..bb06ec2 100644 --- a/lib/DBIx/Class/_Util.pm +++ b/lib/DBIx/Class/_Util.pm @@ -930,12 +930,29 @@ sub fail_on_internal_call { ; }; + my @fr2; + # need to make allowance for a proxy-yet-direct call + my $check_fr = ( + $fr->[0] eq 'DBIx::Class::ResultSourceProxy' + and + @fr2 = (CORE::caller(2)) + and + ( + ( $fr->[3] =~ /([^:])+$/ )[0] + eq + ( $fr2[3] =~ /([^:])+$/ )[0] + ) + ) + ? \@fr2 + : $fr + ; + if ( $argdesc and - $fr->[0] =~ /^(?:DBIx::Class|DBICx::)/ + $check_fr->[0] =~ /^(?:DBIx::Class|DBICx::)/ and - $fr->[1] !~ /\b(?:CDBICompat|ResultSetProxy)\b/ # no point touching there + $check_fr->[1] !~ /\b(?:CDBICompat|ResultSetProxy)\b/ # no point touching there ) { DBIx::Class::Exception->throw( sprintf ( "Illegal internal call of indirect proxy-method %s() with argument '%s': examine the last lines of the proxy method deparse below to determine what to call directly instead at %s on line %d\n\n%s\n\n Stacktrace starts",