From 9ef6aac17a7fca5bd1ca6b77459f3d7b48bbf018 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Fri, 2 Aug 2024 21:55:55 -0500 Subject: [PATCH] packaging: Check for nonzero $? for command failure In a few perl scripts (that happen to be for macOS), we check whether '$? >> 8' is zero to see whether a command failed. But the value of '$? >> 8' is just the exit code of the process. If it instead, for example, was killed by a signal, there is no exit code, and '$? >> 8' may not be accurate (the terminating signal is in '$? & 127'). We should check if $? is nonzero at all to see if an error happened. To avoid any possible issues, update all of our checks for command failure to check if $? is nonzero, instead of '$? >> 8'. In notarize.pl, print out the whole status in addition to the exit code, just to be clear in case the command somehow terminates from a signal. Change-Id: I07ed145fae45d0bdc77c1249cf4d89bd5ba5cc56 Reviewed-on: https://gerrit.openafs.org/15980 Reviewed-by: Michael Meffie Reviewed-by: Cheyenne Wills Reviewed-by: Marcio Brito Barbosa Tested-by: Andrew Deason Reviewed-by: Andrew Deason --- src/packaging/MacOS/Uninstall | 3 +-- src/packaging/MacOS/Uninstall.14.15 | 3 +-- src/packaging/MacOS/notarize.pl | 20 +++++++++----------- 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/src/packaging/MacOS/Uninstall b/src/packaging/MacOS/Uninstall index dabef2d175..22526f425c 100755 --- a/src/packaging/MacOS/Uninstall +++ b/src/packaging/MacOS/Uninstall @@ -76,8 +76,7 @@ sub main if ($do_nothing == 0) { my @rmcmd = ('osascript', '-e', "do shell script \"/bin/rm -f @rmfiles; /bin/rmdir @rmdirs; /bin/rm -rf @rmpkg\" with administrator privileges"); system @rmcmd; - my $retcode = $? >> 8; - if ($retcode != 0) { + if ($? != 0) { print_warning ("Warning: There may have been a problem uninstalling\n"); } } diff --git a/src/packaging/MacOS/Uninstall.14.15 b/src/packaging/MacOS/Uninstall.14.15 index e7b8dc8bfb..662a94687f 100755 --- a/src/packaging/MacOS/Uninstall.14.15 +++ b/src/packaging/MacOS/Uninstall.14.15 @@ -82,8 +82,7 @@ sub main { "echo @rmpkg | xargs -n 1 /usr/sbin/pkgutil --forget\" " . "with administrator privileges' | tr '\\r' '\\n'"; system $rmcmd; - my $retcode = $? >> 8; - if ($retcode != 0) { + if ($? != 0) { print_warning ("Warning: There may have been a problem uninstalling\n"); } } diff --git a/src/packaging/MacOS/notarize.pl b/src/packaging/MacOS/notarize.pl index d39b3ecfe0..e20d93f3af 100755 --- a/src/packaging/MacOS/notarize.pl +++ b/src/packaging/MacOS/notarize.pl @@ -63,10 +63,9 @@ sub check_prerequisites { # Check if the given keychain-profile exists my $output = qx(xcrun notarytool history --keychain-profile "$profile" 2>&1); - my $exitcode = $? >> 8; - - if ($exitcode) { - print(STDERR "error: $exitcode\n"); + if ($? != 0) { + my $exitcode = $? >> 8; + print(STDERR "error: exit code $exitcode (status $?)\n"); print(STDERR $output); exit(1); } @@ -86,10 +85,9 @@ sub process_package { # returns after submitting and processing the package, or times out if it # takes longer than 5 minutes my $output = qx(xcrun notarytool submit "$package" --keychain-profile "$profile" --wait --timeout 5m 2>&1); - my $exitcode = $? >> 8; - - if ($exitcode) { - print(STDERR "error: $exitcode\n"); + if ($? != 0) { + my $exitcode = $? >> 8; + print(STDERR "error: exit code $exitcode (status $?)\n"); print(STDERR $output); exit(1); } @@ -120,10 +118,10 @@ sub notarize_package { print(STDOUT "notarize.pl: notarizing package...\n"); my $output = qx(xcrun stapler staple -v "$package" 2>&1); - my $exitcode = $? >> 8; - - if ($exitcode) { + if ($? != 0) { + my $exitcode = $? >> 8; print(STDERR "error: package could not be notarized (uuid: $uuid)\n"); + print(STDERR "error: exit code $exitcode (status $?)\n"); print(STDERR $output); exit(1); }