����JFIF���������
__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
use strict;
use warnings;
use DBI;
use Test::More;
use vars qw($test_dsn $test_user $test_password);
use lib 't', '.';
require 'lib.pl';
my $COUNT_CONNECT = 4000; # Number of connect/disconnect iterations
my $COUNT_PREPARE = 30000; # Number of prepare/execute/finish iterations
my $COUNT_BIND = 10000; # Number of bind_param iterations
my $have_storable;
if (!$ENV{EXTENDED_TESTING}) {
plan skip_all => "Skip \$ENV{EXTENDED_TESTING} is not set\n";
}
eval { require Proc::ProcessTable; };
if ($@) {
plan skip_all => "module Proc::ProcessTable not installed \n";
}
eval { require Storable };
$have_storable = $@ ? 0 : 1;
my $have_pt_size = grep { $_ eq 'size' } Proc::ProcessTable->new('cache_ttys' => $have_storable)->fields;
unless ($have_pt_size) {
plan skip_all => "module Proc::ProcessTable does not support size attribute on current platform\n";
}
my ($dbh, $sth);
eval {$dbh= DBI->connect($test_dsn, $test_user, $test_password,
{ RaiseError => 1, PrintError => 1, AutoCommit => 0 });};
if ($@) {
plan skip_all =>
"no database connection";
}
$dbh->disconnect;
plan tests => 27 * 2;
sub size {
my($p, $pt);
$pt = Proc::ProcessTable->new('cache_ttys' => $have_storable);
for $p (@{$pt->table()}) {
if ($p->pid() == $$) {
return $p->size();
}
}
die "Cannot find my own process?!?\n";
exit 0;
}
for my $mysql_server_prepare (0, 1) {
note "Testing memory leaks with mysql_server_prepare=$mysql_server_prepare\n";
$dbh= DBI->connect($test_dsn, $test_user, $test_password,
{ RaiseError => 1, PrintError => 1, AutoCommit => 0, mysql_server_prepare => $mysql_server_prepare, mysql_server_prepare_disable_fallback => 1 });
ok $dbh->do("DROP TABLE IF EXISTS dbd_mysql_t60leaks");
my $create= <<EOT;
CREATE TABLE dbd_mysql_t60leaks (
id INT(4) NOT NULL DEFAULT 0,
name VARCHAR(64) NOT NULL DEFAULT ''
)
EOT
ok $dbh->do($create);
my ($size, $prev_size, $ok, $not_ok, $dbh2, $msg);
note "Testing memory leaks in connect/disconnect\n";
$msg = "Possible memory leak in connect/disconnect detected";
$ok = 0;
$not_ok = 0;
$prev_size= undef;
for (my $i = 0; $i < $COUNT_CONNECT; $i++) {
eval {$dbh2 = DBI->connect($test_dsn, $test_user, $test_password,
{ RaiseError => 1,
PrintError => 1,
AutoCommit => 0,
mysql_server_prepare => $mysql_server_prepare,
});};
if ($@) {
$not_ok++;
last;
}
if ($i % 100 == 99) {
$size = size();
if (defined($prev_size)) {
if ($size == $prev_size) {
$ok++;
}
else {
$not_ok++;
}
}
else {
$prev_size = $size;
$size = size();
}
$prev_size = $size;
}
}
$dbh2->disconnect;
ok $ok, "\$ok $ok";
ok !$not_ok, "\$not_ok $not_ok";
cmp_ok $ok, '>', $not_ok, "\$ok $ok \$not_ok $not_ok";
note "Testing memory leaks in prepare/execute/finish\n";
$msg = "Possible memory leak in prepare/execute/finish detected";
$ok = 0;
$not_ok = 0;
undef $prev_size;
for (my $i = 0; $i < $COUNT_PREPARE; $i++) {
my $sth = $dbh->prepare("SELECT * FROM dbd_mysql_t60leaks");
$sth->execute();
$sth->finish();
if ($i % 100 == 99) {
$size = size();
if (defined($prev_size))
{
if ($size == $prev_size) {
$ok++;
}
else {
$not_ok++;
}
}
else {
$prev_size = $size;
$size = size();
}
$prev_size = $size;
}
}
ok $ok;
ok !$not_ok, "\$ok $ok \$not_ok $not_ok";
cmp_ok $ok, '>', $not_ok, "\$ok $ok \$not_ok $not_ok";
note "Testing memory leaks in execute/finish\n";
$msg = "Possible memory leak in execute/finish detected";
$ok = 0;
$not_ok = 0;
undef $prev_size;
{
my $sth = $dbh->prepare("SELECT * FROM dbd_mysql_t60leaks");
for (my $i = 0; $i < $COUNT_PREPARE; $i++) {
$sth->execute();
$sth->finish();
if ($i % 100 == 99) {
$size = size();
if (defined($prev_size))
{
if ($size == $prev_size) {
$ok++;
}
else {
$not_ok++;
}
}
else {
$prev_size = $size;
$size = size();
}
$prev_size = $size;
}
}
}
ok $ok;
ok !$not_ok, "\$ok $ok \$not_ok $not_ok";
cmp_ok $ok, '>', $not_ok, "\$ok $ok \$not_ok $not_ok";
note "Testing memory leaks in bind_param\n";
$msg = "Possible memory leak in bind_param detected";
$ok = 0;
$not_ok = 0;
undef $prev_size;
{
my $sth = $dbh->prepare("SELECT * FROM dbd_mysql_t60leaks WHERE id = ? AND name = ?");
for (my $i = 0; $i < $COUNT_BIND; $i++) {
$sth->bind_param(1, 0);
my $val = "x" x 1000000;
$sth->bind_param(2, $val);
if ($i % 100 == 99) {
$size = size();
if (defined($prev_size))
{
if ($size == $prev_size) {
$ok++;
}
else {
$not_ok++;
}
}
else {
$prev_size = $size;
$size = size();
}
$prev_size = $size;
}
}
}
ok $ok;
ok !$not_ok, "\$ok $ok \$not_ok $not_ok";
cmp_ok $ok, '>', $not_ok, "\$ok $ok \$not_ok $not_ok";
note "Testing memory leaks in fetchrow_arrayref\n";
$msg= "Possible memory leak in fetchrow_arrayref detected";
$sth= $dbh->prepare("INSERT INTO dbd_mysql_t60leaks VALUES (?, ?)") ;
my $dataref= [[1, 'Jochen Wiedmann'],
[2, 'Andreas K�nig'],
[3, 'Tim Bunce'],
[4, 'Alligator Descartes'],
[5, 'Jonathan Leffler']];
for (@$dataref) {
ok $sth->execute($_->[0], $_->[1]),
"insert into dbd_mysql_t60leaks values ($_->[0], '$_->[1]')";
}
$ok = 0;
$not_ok = 0;
undef $prev_size;
for (my $i = 0; $i < $COUNT_PREPARE; $i++) {
{
my $sth = $dbh->prepare("SELECT * FROM dbd_mysql_t60leaks");
$sth->execute();
my $row;
while ($row = $sth->fetchrow_arrayref()) { }
$sth->finish();
}
if ($i % 100 == 99) {
$size = size();
if (defined($prev_size)) {
if ($size == $prev_size) {
++$ok;
}
else {
++$not_ok;
}
}
else {
$prev_size = $size;
$size = size();
}
$prev_size = $size;
}
}
ok $ok;
ok !$not_ok, "\$ok $ok \$not_ok $not_ok";
cmp_ok $ok, '>', $not_ok, "\$ok $ok \$not_ok $not_ok";
note "Testing memory leaks in fetchrow_hashref\n";
$msg = "Possible memory leak in fetchrow_hashref detected";
$ok = 0;
$not_ok = 0;
undef $prev_size;
for (my $i = 0; $i < $COUNT_PREPARE; $i++) {
{
my $sth = $dbh->prepare("SELECT * FROM dbd_mysql_t60leaks");
$sth->execute();
my $row;
while ($row = $sth->fetchrow_hashref()) { }
$sth->finish();
}
if ($i % 100 == 99) {
$size = size();
if (defined($prev_size)) {
if ($size == $prev_size) {
++$ok;
}
else {
++$not_ok;
}
}
else {
$prev_size = $size;
$size = size();
}
$prev_size = $size;
}
}
ok $ok;
ok !$not_ok, "\$ok $ok \$not_ok $not_ok";
cmp_ok $ok, '>', $not_ok, "\$ok $ok \$not_ok $not_ok";
ok $dbh->do("DROP TABLE dbd_mysql_t60leaks");
ok $dbh->disconnect;
}
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| 00base.t | File | 634 B | 0644 |
|
| 01caching_sha2_prime.t | File | 735 B | 0644 |
|
| 05dbcreate.t | File | 760 B | 0644 |
|
| 10connect.t | File | 2.6 KB | 0644 |
|
| 15reconnect.t | File | 1.55 KB | 0644 |
|
| 16dbi-get_info.t | File | 1.26 KB | 0644 |
|
| 17quote.t | File | 1.16 KB | 0644 |
|
| 20createdrop.t | File | 745 B | 0644 |
|
| 25lockunlock.t | File | 1.48 KB | 0644 |
|
| 29warnings.t | File | 1.73 KB | 0644 |
|
| 30insertfetch.t | File | 1.2 KB | 0644 |
|
| 31insertid.t | File | 2.3 KB | 0644 |
|
| 32insert_error.t | File | 901 B | 0644 |
|
| 35limit.t | File | 2.22 KB | 0644 |
|
| 35prepare.t | File | 3.31 KB | 0644 |
|
| 40bindparam.t | File | 2.87 KB | 0644 |
|
| 40bindparam2.t | File | 1.31 KB | 0644 |
|
| 40bit.t | File | 1.25 KB | 0644 |
|
| 40blobs.t | File | 1.88 KB | 0644 |
|
| 40catalog.t | File | 10.27 KB | 0644 |
|
| 40keyinfo.t | File | 1.99 KB | 0644 |
|
| 40listfields.t | File | 2.22 KB | 0644 |
|
| 40nulls.t | File | 1004 B | 0644 |
|
| 40nulls_prepare.t | File | 2.48 KB | 0644 |
|
| 40numrows.t | File | 1.96 KB | 0644 |
|
| 40server_prepare.t | File | 3.37 KB | 0644 |
|
| 40server_prepare_crash.t | File | 2.2 KB | 0644 |
|
| 40server_prepare_error.t | File | 968 B | 0644 |
|
| 40types.t | File | 3.44 KB | 0644 |
|
| 41bindparam.t | File | 1.02 KB | 0644 |
|
| 41blobs_prepare.t | File | 2.04 KB | 0644 |
|
| 41int_min_max.t | File | 6.31 KB | 0644 |
|
| 42bindparam.t | File | 997 B | 0644 |
|
| 43count_params.t | File | 1.93 KB | 0644 |
|
| 50chopblanks.t | File | 2.81 KB | 0644 |
|
| 50commit.t | File | 2.37 KB | 0644 |
|
| 51bind_type_guessing.t | File | 6.03 KB | 0644 |
|
| 52comment.t | File | 1.96 KB | 0644 |
|
| 53comment.t | File | 1.83 KB | 0644 |
|
| 55utf8.t | File | 3.1 KB | 0644 |
|
| 55utf8_errors.t | File | 3.56 KB | 0644 |
|
| 55utf8_identifiers.t | File | 5.53 KB | 0644 |
|
| 55utf8mb4.t | File | 1.04 KB | 0644 |
|
| 56connattr.t | File | 1.65 KB | 0644 |
|
| 57trackgtid.t | File | 944 B | 0644 |
|
| 60leaks.t | File | 7.69 KB | 0644 |
|
| 65segfault.t | File | 1.12 KB | 0644 |
|
| 65types.t | File | 1.31 KB | 0644 |
|
| 70takeimp.t | File | 2.64 KB | 0644 |
|
| 71impdata.t | File | 1.08 KB | 0644 |
|
| 75supported_sql.t | File | 1.21 KB | 0644 |
|
| 76multi_statement.t | File | 2.85 KB | 0644 |
|
| 80procs.t | File | 2.89 KB | 0644 |
|
| 81procs.t | File | 2.86 KB | 0644 |
|
| 85init_command.t | File | 752 B | 0644 |
|
| 86_bug_36972.t | File | 1.24 KB | 0644 |
|
| 87async.t | File | 6.09 KB | 0644 |
|
| 88async-multi-stmts.t | File | 931 B | 0644 |
|
| 89async-method-check.t | File | 5.96 KB | 0644 |
|
| 91errcheck.t | File | 485 B | 0644 |
|
| 92ssl_backronym_vulnerability.t | File | 1.46 KB | 0644 |
|
| 92ssl_optional.t | File | 1.47 KB | 0644 |
|
| 92ssl_riddle_vulnerability.t | File | 1.48 KB | 0644 |
|
| 99_bug_server_prepare_blob_null.t | File | 1.38 KB | 0644 |
|
| 99compression.t | File | 1.16 KB | 0644 |
|
| gh352.t | File | 626 B | 0644 |
|
| gh360.t | File | 842 B | 0644 |
|
| gh447-paramvalues.t | File | 4.15 KB | 0644 |
|
| lib.pl | File | 3.89 KB | 0644 |
|
| manifest.t | File | 290 B | 0644 |
|
| mysql.mtest | File | 950 B | 0644 |
|
| pod.t | File | 129 B | 0644 |
|
| rt110983-valid-mysqlfd.t | File | 724 B | 0644 |
|
| rt118977-zerofill.t | File | 897 B | 0644 |
|
| rt25389-bin-case.t | File | 1.44 KB | 0644 |
|
| rt50304-column_info_parentheses.t | File | 1.54 KB | 0644 |
|
| rt61849-bind-param-buffer-overflow.t | File | 711 B | 0644 |
|
| rt75353-innodb-lock-timeout.t | File | 2.96 KB | 0644 |
|
| rt83494-quotes-comments.t | File | 922 B | 0644 |
|
| rt85919-fetch-lost-connection.t | File | 2.32 KB | 0644 |
|
| rt86153-reconnect-fail-memory.t | File | 1.94 KB | 0644 |
|
| rt88006-bit-prepare.t | File | 3.66 KB | 0644 |
|
| rt91715.t | File | 850 B | 0644 |
|
| version.t | File | 406 B | 0644 |
|