/usr/lib/perl5/DBD/testme.tmp.pl is in libdbd-pg-perl 2.19.0-1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 | #!/usr/bin/env perl
BEGIN {
use lib '.', 'blib/lib', 'blib/arch';
system 'make';
}
use strict;
use warnings;
use DBI ':sql_types';
use Data::Dumper;
use YAML;
use DBD::Pg qw/:pg_types/;
use Data::Peek;
use vars qw/$sth $info $count $SQL/;
my $tracelevel = shift || 0;
$ENV{DBI_TRACE} = $tracelevel;
my $DSN = 'DBI:Pg:dbname=postgres';
my $dbh = DBI->connect($DSN, '', '', {AutoCommit=>0,RaiseError=>1,PrintError=>0})
or die "Connection failed!\n";
my $me = $dbh->{Driver}{Name};
print "DBI is version $DBI::VERSION, I am $me, version of DBD::Pg is $DBD::Pg::VERSION\n";
memory_leak_test_bug_65734();
exit;
sub memory_leak_test_bug_65734 {
## Memory leak when an array appears in the bind variables
## Set things up
$dbh->do('CREATE TEMPORARY TABLE tbl1 (id SERIAL PRIMARY KEY, val INTEGER[])');
$dbh->do('CREATE TEMPORARY TABLE tbl2 (id SERIAL PRIMARY KEY, val INTEGER)');
## Subroutine that performs the leaking action
sub leakmaker1 {
$dbh->do('INSERT INTO tbl1(val) VALUES (?)', undef, [123]);
}
## Control subroutine that does not leak
sub leakmaker2 {
$dbh->do('INSERT INTO tbl2(val) VALUES (?)', undef, 123);
}
leakcheck(\&leakmaker1,1000);
exit;
} ## end of memory_leak_test_bug_65734
sub leakcheck {
my $sub = shift;
my $count = shift || 1000;
my $maxsize = shift || 100000;
## Safety check:
if (exists $ENV{DBI_TRACE} and $ENV{DBI_TRACE} != 0 and $ENV{DBI_TRACE} != 42) {
$maxsize = 1;
}
my $runs = 0;
while (1) {
last if $runs++ >= $maxsize;
&$sub();
unless ($runs % $count) {
printf "Cycles: %d\tProc size: %uK\n",
$runs,
(-f "/proc/$$/stat")
? do { local @ARGV="/proc/$$/stat"; (split (/\s/, <>))[22] / 1024 }
: -1;
}
}
} ## end of leakcheck
__END__
|