From: Will Woods Date: Thu, 23 Aug 2012 20:56:01 +0000 (-0400) Subject: make splitsep preserve backslashes (RHBZ#851295) X-Git-Tag: 024~95 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=32b2fb8a276ce1107a7784b96fab56a1b4dc05a1;p=thirdparty%2Fdracut.git make splitsep preserve backslashes (RHBZ#851295) splitsep() would drop escapes from its inputs. For example: splitsep ':' 'first:middle:\e\s\c\a\p\e\d' a b c gave a='first', b='middle', c='escaped'. Even worse: splitsep ':' '\e\s\c\a\p\e\d:middle:last' a b c gave a='escaped', b='escaped', c='escaped:middle:last'. This fixes the quoting so both calls return the values you'd expect (e.g. 'first', 'middle', '\e\s\c\a\p\e\d'). --- diff --git a/modules.d/99base/dracut-lib.sh b/modules.d/99base/dracut-lib.sh index 381b4ddc4..60b4cb17a 100755 --- a/modules.d/99base/dracut-lib.sh +++ b/modules.d/99base/dracut-lib.sh @@ -271,12 +271,12 @@ splitsep() { while [ -n "$str" -a "$#" -gt 1 ]; do tmp="${str%%$sep*}" - eval "$1=${tmp}" - str="${str#$tmp}" + eval "$1='${tmp}'" + str="${str#"$tmp"}" str="${str#$sep}" shift done - [ -n "$str" -a -n "$1" ] && eval "$1=$str" + [ -n "$str" -a -n "$1" ] && eval "$1='$str'" debug_on return 0 }