Handle the case of pipe char in value for iniset

iniset did not handle the case of "|" in the value
to be injected. Fix this by replacing | with \000 (NULL).

Fixes bug #1258050

Change-Id: I8882c2f3f177ebdfa0c66270dbbc7fd50f30b065
This commit is contained in:
Andrea Frittoli 2013-12-05 08:09:12 +00:00
parent 78411958fd
commit cd7d956fbc
2 changed files with 22 additions and 1 deletions

View File

@ -741,8 +741,9 @@ function iniset() {
$option = $value
" "$file"
else
local sep=$(echo -ne "\x01")
# Replace it
sed -i -e "/^\[$section\]/,/^\[.*\]/ s|^\($option[ \t]*=[ \t]*\).*$|\1$value|" "$file"
sed -i -e '/^\['${section}'\]/,/^\[.*\]/ s'${sep}'^\('${option}'[ \t]*=[ \t]*\).*$'${sep}'\1'"${value}"${sep} "$file"
fi
}

View File

@ -136,6 +136,26 @@ else
echo "iniget failed: $VAL"
fi
# test pipe in option
iniset test.ini aaa handlers "a|b"
VAL=$(iniget test.ini aaa handlers)
if [[ "$VAL" == "a|b" ]]; then
echo "OK: $VAL"
else
echo "iniget failed: $VAL"
fi
# test space in option
iniset test.ini aaa handlers "a b"
VAL="$(iniget test.ini aaa handlers)"
if [[ "$VAL" == "a b" ]]; then
echo "OK: $VAL"
else
echo "iniget failed: $VAL"
fi
# Test section not exist
VAL=$(iniget test.ini zzz handlers)