From e0a110da6ff3595d2557d86c6df0f15f6ed45593 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Wed, 23 Mar 2022 07:52:50 -0700 Subject: hygiene: shell escape $awk and $prepro. Since $awk and $prepro are now controlled via command line options, and are being fed to eval, we should shell escape them. Two of our test cases rely on the loose interpolation behavior; we fix those using proper external mock programs testawk and testcpp. --- cppawk | 23 +++++------------------ testawk | 3 +++ testcases | 6 +++--- testcpp | 3 +++ 4 files changed, 14 insertions(+), 21 deletions(-) create mode 100755 testawk create mode 100755 testcpp diff --git a/cppawk b/cppawk index 35cfffb..867308a 100755 --- a/cppawk +++ b/cppawk @@ -151,28 +151,15 @@ while [ $# -gt 0 ] ; do shift done -case $awk in - 'command '* ) - ;; - * ) - awk="command $awk" - ;; -esac - -case $prepro in - 'command '* ) - ;; - * ) - prepro="command $prepro" - ;; -esac +awk="command $(quote "$awk")" +prepro="command $(quote "$prepro")" trap 'rm -f $tmp_file' EXIT INT TERM if [ -n "$awk_file" ] ; then tmp_file=$(mktemp) $delhashbang "$awk_file" | \ - eval '$prepro $incopt"$(dirname "$awk_file")" '"$prepro_opts -" | \ + eval "$prepro $incopt"'"$(dirname "$awk_file")" '"$prepro_opts -" | \ collapse > $tmp_file [ $prepro_only ] \ && cat $tmp_file \ @@ -181,10 +168,10 @@ elif [ $# -gt 0 ] ; then tmp_file=$(mktemp) if [ $prepro_only ] ; then printf "%s" "$1" | $delhashbang | \ - eval '$prepro $incopt"$(pwd)" '"$prepro_opts - | collapse" + eval "$prepro $incopt"$(pwd)" $prepro_opts - | collapse" else printf "%s" "$1" | $delhashbang | \ - eval '$prepro $incopt"$(pwd)" '"$prepro_opts - | collapse" > $tmp_file + eval "$prepro $incopt"$(pwd)" $prepro_opts - | collapse" > $tmp_file shift eval "$awk $awk_opts -f $tmp_file -- \"\$@\"" fi diff --git a/testawk b/testawk new file mode 100755 index 0000000..a41b4b6 --- /dev/null +++ b/testawk @@ -0,0 +1,3 @@ +#!/bin/sh +printf "[%.2s]" "$@" +printf "\n" diff --git a/testcases b/testcases index 8758398..31bf6af 100644 --- a/testcases +++ b/testcases @@ -180,14 +180,14 @@ foo_bar foo_bar -- 32: -./cppawk --awk='printf "[%.2s]"' foo +./cppawk --awk=./testawk foo : [-f][/t][--] -- 33: -./cppawk --prepro-only --prepro='printf %.3s' abc +./cppawk --prepro-only --prepro=./testcpp abc : --iq-D_-I.- +[-iq][-D_][-I.][-] -- 34: ./cppawk --prepro-only --awk=mawk mawk=__mawk__ | grep mawk diff --git a/testcpp b/testcpp new file mode 100755 index 0000000..d93bcbb --- /dev/null +++ b/testcpp @@ -0,0 +1,3 @@ +#!/bin/sh +printf "[%.3s]" "$@" +printf "\n" -- cgit v1.2.3