diff options
author | Johannes Schindelin <johannes.schindelin@gmx.de> | 2023-02-22 12:40:55 +0100 |
---|---|---|
committer | Johannes Schindelin <johannes.schindelin@gmx.de> | 2023-04-17 21:15:39 +0200 |
commit | c4137be0f5a6edf9a9044e6e43ecf4468c7a4046 (patch) | |
tree | abd73aae72065684e2d02741b921dc5b061078c1 /gettext.c | |
parent | 2f3b28f27234a0130583131a6785c44e3dd1cac4 (diff) | |
download | git-c4137be0f5a6edf9a9044e6e43ecf4468c7a4046.tar.gz |
gettext: avoid using gettext if the locale dir is not present
In cc5e1bf99247 (gettext: avoid initialization if the locale dir is not
present, 2018-04-21) Git was taught to avoid a costly gettext start-up
when there are not even any localized messages to work with.
But we still called `gettext()` and `ngettext()` functions.
Which caused a problem in Git for Windows when the libgettext that is
consumed from the MSYS2 project stopped using a runtime prefix in
https://github.com/msys2/MINGW-packages/pull/10461
Due to that change, we now use an unintialized gettext machinery that
might get auto-initialized _using an unintended locale directory_:
`C:\mingw64\share\locale`.
Let's record the fact when the gettext initialization was skipped, and
skip calling the gettext functions accordingly.
This addresses CVE-2023-25815.
Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Diffstat (limited to 'gettext.c')
-rw-r--r-- | gettext.c | 4 |
1 files changed, 4 insertions, 0 deletions
@@ -109,6 +109,8 @@ static void init_gettext_charset(const char *domain) setlocale(LC_CTYPE, "C"); } +int git_gettext_enabled = 0; + void git_setup_gettext(void) { const char *podir = getenv(GIT_TEXT_DOMAIN_DIR_ENVIRONMENT); @@ -130,6 +132,8 @@ void git_setup_gettext(void) init_gettext_charset("git"); textdomain("git"); + git_gettext_enabled = 1; + free(p); } |