1#- 2# SPDX-License-Identifier: BSD-2-Clause 3# 4# Copyright 2026 Simon J Gerraty 5# 6 7atf_test_case safe_set_reject 8safe_set_reject_head() 9{ 10 atf_set "descr" "Verify that safe_set rejects shell meta chars" 11} 12 13safe_set_reject_body() 14{ 15 __name="$(atf_get ident)" 16 __input=$(mktemp -t "${__name}.input") 17 18 cat <<'EOF' > "$__input" 19: ignore=this 20# ignore this too 21# avoid # in the middle of a quoted value like: 22# oops="this # will cause synatx error" 23quoted="this and that" 24simple=ok # trailing comments ignored 25 also=ok # leading white-space ignored 26 also_wik=ok 27host=`hostname`' # backtics - delete line 28os=$(uname -s) # $() - delete line 29oops=one;hostname' # replace ; with _ so: one_hostname 30regex="prefix[abc-]*" # []* replaced with _ 31EOF 32 33 __output=$(safe_set < "$__input" | tr '"\012' '\047;') 34 atf_check_equal "$__output" "quoted='this and that';simple=ok;also=ok;also_wik=ok;oops=one_hostname_;regex='prefix_abc-__';" 35} 36 37 38atf_test_case safe_set_xtras 39safe_set_xtras_head() 40{ 41 atf_set "descr" "Verify that safe_set handles extra allowed chars" 42} 43 44safe_set_xtras_body() 45{ 46 __name="$(atf_get ident)" 47 __input=$(mktemp -t "${__name}.input") 48 49 cat <<'EOF' > "$__input" 50: ignore=this 51# ignore this too 52regex="prefix[abc-]*" 53EOF 54 55 __output=$(safe_set "[]*" < "$__input" | tr '"\012' '\047;') 56 atf_check_equal "$__output" "regex='prefix[abc-]*';" 57} 58 59atf_init_test_cases() 60{ 61 SAFE_EVAL=${SAFE_EVAL:-/libexec/safe_eval.sh} 62 . $SAFE_EVAL 63 atf_add_test_case safe_set_reject 64 atf_add_test_case safe_set_xtras 65} 66