diff options
author | Magnus Svensson <msvensson@mysql.com> | 2009-01-21 18:18:03 +0100 |
---|---|---|
committer | Magnus Svensson <msvensson@mysql.com> | 2009-01-21 18:18:03 +0100 |
commit | c2a4f3901bf592443f78de739e0d3dddb0b268a5 (patch) | |
tree | c4f05377622c8877c52b1452d29cca8b00bbd712 /mysql-test/lib | |
parent | bf33a3fa896eadd7c8495ca3cf0c82a9d9366794 (diff) | |
download | mariadb-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.pm | 46 |
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; } |