Subject: Re: [RFC/PATCH 1/5] gettext: fix bug in git-sh-i18n's eval_gettext() by using envsubst(1)

From: Johannes Sixt <[email-masked]>
Date: Tue, 02 Nov 2010 09:33:12 +0100

Am 10/31/2010 12:34, schrieb Ævar Arnfjörð Bjarmason:
> Change eval_gettext(1) in git-sh-i18n.sh to use a modified version of
> gettext's envsubst(1) program, instead of using a clever (but broken)
> printf + eval + printf trick.
> 
> Our previous fallback would incorrectly handle cases where the
> variable being interpolated contained spaces. E.g.:
> 
>     cmd="git foo"; eval_gettext "command: \$cmd"
> 
> Would emit "command: gitfoo", instead of the correct "command: git
> foo". This happened with a message in git-am.sh that used the $cmdline
> variable.
> 
> To work around this, and to improve our variable expansion behavior
> (eval has security issues) I've imported a stripped-down version of
> gettext's envsubst(1) program.

Would this help the case mentioned above at all? To pass the value of
'cmd' to envsubst, you have to export it. But the code snippet above
doesn't do that.

Wouldn't it be much simpler to dodge variable substitutions in the
translated string entirely by rewriting such texts as (e.g.)

	gettext_printf "command: %s\n" "$cmd"

and use printf in the implementation. I don't know how compatible you can
make this with existing gettext implementations, though.

-- Hannes