From: Pavel Valena Date: Fri, 25 Mar 2022 16:26:19 +0000 (+0100) Subject: fix(10i18n): stop leaking shell options X-Git-Tag: 057~57 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f3441cc7c577554dde04a9fe90638f779bb0a411;p=thirdparty%2Fdracut.git fix(10i18n): stop leaking shell options Avoid using shell options in findkeymap, instead of using a wrapper[*] to restore the previous options. Using mapfile and find to generate the list of files also has the benefit of being more readable in this case. [*] Reverted commit 35064768ebf14d3ec6bf3f7df52580fb4920ea3d Original issue description from Michal Hecko : The findkeymap function manipulates the shell options and relies on restoring them using the trap. However, as the function might be called recursively, each recursive invocation changes the signal handler to its own. As the recursion is entered with shell options already modified, the changed trap handler is replaced with restoration to the modified shell options, not the original ones. --- diff --git a/modules.d/10i18n/module-setup.sh b/modules.d/10i18n/module-setup.sh index f25026fb8..35bda36fb 100755 --- a/modules.d/10i18n/module-setup.sh +++ b/modules.d/10i18n/module-setup.sh @@ -31,10 +31,6 @@ install() { VCONFIG_CONF="/etc/vconsole.conf" findkeymap() { - # shellcheck disable=SC2064 - trap "$(shopt -p nullglob globstar)" RETURN - shopt -q -s nullglob globstar - local -a MAPS local MAPNAME local INCLUDES @@ -46,7 +42,10 @@ install() { MAPS=("$1") else MAPNAME=${1%.map*} - MAPS=("$dracutsysrootdir""${kbddir}"/keymaps/**/"${MAPNAME}"{,.map{,.*}}) + + mapfile -t -d '' MAPS < <( + find "${dracutsysrootdir}${kbddir}"/keymaps/ -type f \( -name "${MAPNAME}" -o -name "${MAPNAME}.map*" \) -print0 + ) fi for MAP in "${MAPS[@]}"; do