Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
home:MargueriteSu:archlinux-devtools
pacman
0002-makepkg-Don-t-use-parameterless-return.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0002-makepkg-Don-t-use-parameterless-return.patch of Package pacman
From bd164585f1a815a9f57b0c5bd2365d251500bc9f Mon Sep 17 00:00:00 2001 Message-Id: <bd164585f1a815a9f57b0c5bd2365d251500bc9f.1527784094.git.jan.steffens@gmail.com> In-Reply-To: <842bdfbb622db0673d4952812a490e10f61fa3bd.1527784094.git.jan.steffens@gmail.com> References: <842bdfbb622db0673d4952812a490e10f61fa3bd.1527784094.git.jan.steffens@gmail.com> From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com> Date: Thu, 31 May 2018 17:46:51 +0200 Subject: [PATCH 2/2] makepkg: Don't use parameterless return It's especially dangerous in trap handlers since the return value of the function becomes the return value of the last command before the trap, not the last command in the current function. This applies to any function executed in a trap handler, nested functions included. In one case, install_packages failed (via return 14), which was inside a conditional that then ran exit 14, which triggered the EXIT handler, which called clean_up, which called remove_deps, which had !RMDEPS and thus returned. The return value of remove_deps became the return value of install_packages, triggering the ERR handler, which (due to another problem) was still the user function handler, which then printed a misleading error message and overrode the exit code with 4. --- scripts/makepkg.sh.in | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in index d67fd853..15524dc0 100644 --- a/scripts/makepkg.sh.in +++ b/scripts/makepkg.sh.in @@ -133,7 +133,7 @@ clean_up() { if (( INFAKEROOT )); then # Don't clean up when leaving fakeroot, we're not done yet. - return + return 0 fi if (( (EXIT_CODE == E_OK || EXIT_CODE == E_INSTALL_FAILED) && CLEANUP )); then @@ -313,7 +313,7 @@ resolve_deps() { } remove_deps() { - (( ! RMDEPS )) && return + (( ! RMDEPS )) && return 0 # check for packages removed during dependency install (e.g. due to conflicts) # removing all installed packages is risky in this case @@ -519,7 +519,7 @@ find_libdepends() { if (( sodepends == 0 )); then (( ${#depends[@]} )) && printf '%s\n' "${depends[@]}" - return; + return 0; fi local libdeps filename soarch sofile soname soversion; @@ -721,7 +721,7 @@ list_package_files() { } create_package() { - (( NOARCHIVE )) && return + (( NOARCHIVE )) && return 0 if [[ ! -d $pkgdir ]]; then error "$(gettext "Missing %s directory.")" "\$pkgdir/" @@ -784,14 +784,14 @@ create_package() { create_debug_package() { # check if a debug package was requested if ! check_option "debug" "y" || ! check_option "strip" "y"; then - return + return 0 fi pkgdir="$pkgdirbase/$pkgbase-@DEBUGSUFFIX@" # check if we have any debug symbols to package if dir_is_empty "$pkgdir/usr/lib/debug"; then - return + return 0 fi unset groups depends optdepends provides conflicts replaces backup install changelog @@ -875,7 +875,7 @@ create_srcpackage() { } install_package() { - (( ! INSTALL )) && return + (( ! INSTALL )) && return 0 if (( ! SPLITPKG )); then msg "$(gettext "Installing package %s with %s...")" "$pkgname" "$PACMAN -U" -- 2.17.0
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor