summaryrefslogtreecommitdiff
path: root/mysql-test/lib
diff options
context:
space:
mode:
authorMagnus Svensson <msvensson@mysql.com>2009-01-21 18:18:03 +0100
committerMagnus Svensson <msvensson@mysql.com>2009-01-21 18:18:03 +0100
commitc2a4f3901bf592443f78de739e0d3dddb0b268a5 (patch)
treec4f05377622c8877c52b1452d29cca8b00bbd712 /mysql-test/lib
parentbf33a3fa896eadd7c8495ca3cf0c82a9d9366794 (diff)
downloadmariadb-git-c2a4f3901bf592443f78de739e0d3dddb0b268a5.tar.gz
Bug#35735 mysql-test-run.pl creates tmpdir for socket path longer than 70
- Additional patch with improved protection by putting it all inside an "eval" - Calling 'hostpath' on a truncated socket may also croak. - Remove the need to create any directory parts of "path" inside the function.
Diffstat (limited to 'mysql-test/lib')
-rw-r--r--mysql-test/lib/My/Platform.pm46
1 files changed, 21 insertions, 25 deletions
diff --git a/mysql-test/lib/My/Platform.pm b/mysql-test/lib/My/Platform.pm
index 0ea135756b8..3dd5c552b10 100644
--- a/mysql-test/lib/My/Platform.pm
+++ b/mysql-test/lib/My/Platform.pm
@@ -100,47 +100,43 @@ sub posix_path {
return $path;
}
+use File::Temp qw /tempdir/;
sub check_socket_path_length {
my ($path)= @_;
- my $truncated= 0;
return 0 if IS_WINDOWS;
require IO::Socket::UNIX;
+ my $truncated= 1; # Be negative
+
+ # Create a tempfile name with same length as "path"
+ my $tmpdir = tempdir( CLEANUP => 0);
+ my $len = length($path) - length($tmpdir);
+ my $testfile = $tmpdir . "x" x ($len > 0 ? $len : 1);
my $sock;
eval {
- # Create the directories where the
- # socket till be created
- mkpath(dirname($path));
-
$sock= new IO::Socket::UNIX
(
- Local => $path,
+ Local => $testfile,
Listen => 1,
);
+ die "Could not create UNIX domain socket: $!"
+ unless defined $sock;
+
+ die "UNIX domain socket patch was truncated"
+ unless ($testfile eq $sock->hostpath());
+
+ $truncated= 0; # Yes, it worked!
+
};
- if ($@)
- {
- print $@, '\n';
- return 2;
- }
- if (!defined $sock){
- #print "Could not create UNIX domain socket: $!\n";
- return 3;
- }
- if ($path ne $sock->hostpath()){
- # Path was truncated
- $truncated= 1;
- # Output diagnostic messages
- print "path: '$path', length: ", length($path) ,"\n";
- print "hostpath: '", $sock->hostpath(),
- "', length: ", length($sock->hostpath()), "\n";
- }
- $sock= undef; # Close socket
- unlink($path); # Remove the physical file
+ #print "check_socket_path_length, failed: ", $@, '\n' if ($@);
+
+ $sock= undef; # Close socket
+ unlink($testfile); # Remove the physical file
+ rmdir($tmpdir); # Remove the tempdir
return $truncated;
}