Make OpenSSL::Test::run() sensitive to signals
$? in perl gets the status value from wait(2), which is a word with
the exit code in the upper half and the number of a raised signal in
the lower half. OpenSSL::Test::run() ignored the signal half up until
now.
With this change, we recalculate an exit code the same way the Unix
shells do, using this formula:
($? & 0x7f) ? ($? & 0x7f)|0x80 : ($? >> 8);
Reviewed-by: Rich Salz <rsalz@openssl.org>
Reviewed-by: Emilia Käsper <emilia@openssl.org>
This commit is contained in:
@@ -324,12 +324,17 @@ sub run {
|
|||||||
my @r = ();
|
my @r = ();
|
||||||
my $r = 0;
|
my $r = 0;
|
||||||
my $e = 0;
|
my $e = 0;
|
||||||
|
|
||||||
|
# The dance we do with $? is the same dance the Unix shells appear to
|
||||||
|
# do. For example, a program that gets aborted (and therefore signals
|
||||||
|
# SIGABRT = 6) will appear to exit with the code 134. We mimic this
|
||||||
|
# to make it easier to compare with a manual run of the command.
|
||||||
if ($opts{capture}) {
|
if ($opts{capture}) {
|
||||||
@r = `$prefix$cmd`;
|
@r = `$prefix$cmd`;
|
||||||
$e = $? >> 8;
|
$e = ($? & 0x7f) ? ($? & 0x7f)|0x80 : ($? >> 8);
|
||||||
} else {
|
} else {
|
||||||
system("$prefix$cmd");
|
system("$prefix$cmd");
|
||||||
$e = $? >> 8;
|
$e = ($? & 0x7f) ? ($? & 0x7f)|0x80 : ($? >> 8);
|
||||||
$r = $hooks{exit_checker}->($e);
|
$r = $hooks{exit_checker}->($e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user