revision: always store allocated strings in output encoding
commit844d190677216c0754287f14d9474a55adf606a4
authorPatrick Steinhardt <ps@pks.im>
Fri, 7 Jun 2024 06:39:07 +0000 (7 08:39 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 7 Jun 2024 17:30:54 +0000 (7 10:30 -0700)
treec657e2acee2aa951f1c61a0d330a30f27f94ddaf
parenta3da6948c3b6c272bf7a381b86df9a60bdf2b052
revision: always store allocated strings in output encoding

The `git_log_output_encoding` variable can be set via the `--encoding=`
option. When doing so, we conditionally either assign it to the passed
value, or if the value is "none" we assign it the empty string.
Depending on which of the both code paths we pick though, the variable
may end up being assigned either an allocated string or a string
constant.

This is somewhat risky and may easily lead to bugs when a different code
path may want to reassign a new value to it, freeing the previous value.
We already to this when parsing the "i18n.logoutputencoding" config in
`git_default_i18n_config()`. But because the config is typically parsed
before we parse command line options this has been fine so far.

Regardless of that, safeguard the code such that the variable always
contains an allocated string. While at it, also free the old value in
case there was any to plug a potential memory leak.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
revision.c
t/t3900-i18n-commit.sh
t/t3901-i18n-patch.sh