Subject: | Incomplete caller override detected in &PerlGuard::Agent::LexWrap |
Hi,
We've been seeing issues with PerlGuard-Agent corrupting Carp traces:
[...]
CGI::Application::__get_body(** Incomplete caller override detected in &PerlGuard::Agent::LexWrap::__ANON__; @DB::args were not set **) called at /usr/share/perl5/CGI/Application.pm line 191
[...]
The attached patch is a possible fix, after applying it the traces contain:
[...]
CGI::Application::__get_body('Application::Controller=HASH(0x22a35...', 'search') called at /usr/share/perl5/CGI/Application.pm line 191
[...]
as expected.
Ian.
Subject: | lexwrap.diff |
--- PerlGuard/Agent/LexWrap.bak 2016-09-01 09:07:31.159635616 +0100
+++ PerlGuard/Agent/LexWrap.pm 2016-09-01 09:07:47.056132887 +0100
@@ -12,11 +12,11 @@
*CORE::GLOBAL::caller = sub (;$) {
my ($height) = ($_[0]||0);
my $i=1;
my $name_cache;
while (1) {
- my @caller = CORE::caller($i++) or return;
+ my @caller = CORE::caller eq 'DB' ? do { package DB; CORE::caller($i++) } : CORE::caller($i++) or return;
$caller[3] = $name_cache if $name_cache;
$name_cache = $caller[0] eq 'PerlGuard::Agent::LexWrap' ? $caller[3] : '';
next if $name_cache || $height-- != 0;
return wantarray ? @_ ? @caller : @caller[0..2] : $caller[0];
}