diff --git a/profile.d/conf.sh b/profile.d/conf.sh index c13836b..bf4fad1 100755 --- a/profile.d/conf.sh +++ b/profile.d/conf.sh @@ -53,7 +53,7 @@ conf_save() local section="$1" key="$2" value="$3" - if ! [[ "$section" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then + if ! [[ "$section" =~ ^[a-zA-Z0-9_]+$ ]]; then disp E "conf_save: invalid section name '${section}' (alphanumeric and underscore only)." return 1 fi @@ -87,8 +87,12 @@ conf_save() fi local tmp_file="${conf_file}.tmp.$$" - awk -v sec="$section" -v key="$key" -v val="$value" ' + # The value is passed via ENVIRON (not awk -v) so backslashes are preserved + # verbatim; awk -v would interpret C escape sequences (\t, \n, \e, ...). + _CONF_SAVE_VAL="$value" \ + awk -v sec="$section" -v key="$key" ' BEGIN { + val = ENVIRON["_CONF_SAVE_VAL"] in_sec = 0 saw_sec = 0 wrote = 0 @@ -203,6 +207,10 @@ conf_dump() shift break ;; + *) + disp E "Invalid option, use \"conf_dump --help\" to display options list" + return 1 + ;; esac done