test/recipes/90-test_shlibload.t: Modify to work with known file names

Using File::Temp::tempfile() is admirable, but isn't necessary for the
sort of thing we use it for.

Furthermore, since tempfile() returns an opened file handle for
reading for the file in question, it may have effect that the file
becomes unwritable.  This is the default on VMS, and since tempfile()
doesn't seem to have any option to affect this, it means that
test/shlibloadtest.c can't write the magic line to that file.

Also, if we consider forensics, to be able to see what a test produced
to determine what went wrong, it's better to use specific and known
file names.

Therefore, this test is modified to use well known file names, and to
open them for reading after the shlibloadtest program has been run
instead of before.

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/15872)
This commit is contained in:
Richard Levitte 2021-06-23 08:10:37 +02:00 committed by Pauli
parent 2fee3a77f8
commit 505fcdb5de

View File

@ -8,7 +8,6 @@
use OpenSSL::Test qw/:DEFAULT srctop_dir bldtop_dir/;
use OpenSSL::Test::Utils;
use File::Temp qw(tempfile);
#Load configdata.pm
@ -29,35 +28,44 @@ plan tests => 10;
my $libcrypto = platform->sharedlib('libcrypto');
my $libssl = platform->sharedlib('libssl');
my $atexit_outfile;
(my $fh, my $filename) = tempfile();
ok(run(test(["shlibloadtest", "-crypto_first", $libcrypto, $libssl, $filename])),
"running shlibloadtest -crypto_first $filename");
ok(check_atexit($fh));
unlink $filename;
($fh, $filename) = tempfile();
ok(run(test(["shlibloadtest", "-ssl_first", $libcrypto, $libssl, $filename])),
"running shlibloadtest -ssl_first $filename");
ok(check_atexit($fh));
unlink $filename;
($fh, $filename) = tempfile();
ok(run(test(["shlibloadtest", "-just_crypto", $libcrypto, $libssl, $filename])),
"running shlibloadtest -just_crypto $filename");
ok(check_atexit($fh));
unlink $filename;
($fh, $filename) = tempfile();
ok(run(test(["shlibloadtest", "-dso_ref", $libcrypto, $libssl, $filename])),
"running shlibloadtest -dso_ref $filename");
ok(check_atexit($fh));
unlink $filename;
($fh, $filename) = tempfile();
ok(run(test(["shlibloadtest", "-no_atexit", $libcrypto, $libssl, $filename])),
"running shlibloadtest -no_atexit $filename");
ok(!check_atexit($fh));
unlink $filename;
$atexit_outfile = 'atexit-cryptofirst.txt';
1 while unlink $atexit_outfile;
ok(run(test(["shlibloadtest", "-crypto_first", $libcrypto, $libssl, $atexit_outfile])),
"running shlibloadtest -crypto_first $atexit_outfile");
ok(check_atexit($atexit_outfile));
$atexit_outfile = 'atexit-sslfirst.txt';
1 while unlink $atexit_outfile;
ok(run(test(["shlibloadtest", "-ssl_first", $libcrypto, $libssl, $atexit_outfile])),
"running shlibloadtest -ssl_first $atexit_outfile");
ok(check_atexit($atexit_outfile));
$atexit_outfile = 'atexit-justcrypto.txt';
1 while unlink $atexit_outfile;
ok(run(test(["shlibloadtest", "-just_crypto", $libcrypto, $libssl, $atexit_outfile])),
"running shlibloadtest -just_crypto $atexit_outfile");
ok(check_atexit($atexit_outfile));
$atexit_outfile = 'atexit-dsoref.txt';
1 while unlink $atexit_outfile;
ok(run(test(["shlibloadtest", "-dso_ref", $libcrypto, $libssl, $atexit_outfile])),
"running shlibloadtest -dso_ref $atexit_outfile");
ok(check_atexit($atexit_outfile));
$atexit_outfile = 'atexit-noatexit.txt';
1 while unlink $atexit_outfile;
ok(run(test(["shlibloadtest", "-no_atexit", $libcrypto, $libssl, $atexit_outfile])),
"running shlibloadtest -no_atexit $atexit_outfile");
ok(!check_atexit($atexit_outfile));
sub check_atexit {
my $fh = shift;
my $filename = shift;
open my $fh, '<', $filename;
return 0 unless defined $fh;
my $data = <$fh>;
return 1 if (defined $data && $data =~ m/atexit\(\) run/);