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
diff --git a/functions b/functions
index 0280b2b..995be57 100644
--- a/functions
+++ b/functions
@@ -741,8 +741,9 @@
 $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
 }
 
diff --git a/tests/test_ini.sh b/tests/test_ini.sh
index b0dc6b1..598cd57 100755
--- a/tests/test_ini.sh
+++ b/tests/test_ini.sh
@@ -136,6 +136,26 @@
     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)