Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitf0a264a

Browse files
committed
Fix failure to copy setlocale() return value.
POSIX permits setlocale() calls to invalidate any previous setlocale()return values, but commit5f538adneglected to account for setlocale(LC_CTYPE, NULL) doing so. The effectwas to set the LC_CTYPE environment variable to an unintended value.pg_perm_setlocale() sets this variable to assist PL/Perl; without it,Perl would undo PostgreSQL's locale settings. The known-affectedconfigurations are 32-bit, release builds using Visual Studio 2012 orVisual Studio 2013. Visual Studio 2010 is unaffected, as were allbuildfarm-attested configurations. In principle, this bug could leavethe wrong LC_CTYPE in effect after PL/Perl use, which could in turnfacilitate problems like corrupt tsvector datums. No known platformexperiences that consequence, because PL/Perl on Windows does not usethis environment variable.The bug has been user-visible, as early postmaster failure, on systemswith Windows ANSI code page set to CP936 for "Chinese (Simplified, PRC)"and probably on systems using other multibyte code pages.(SetEnvironmentVariable() rejects values containing character data notvalid under the Windows ANSI code page.) Back-patch to 9.4, where thefaulty commit first appeared.Reported by Didi Hu and 林鹏程. Reviewed by Tom Lane, though this fixstrategy was not his first choice.
1 parent1f2a378 commitf0a264a

File tree

1 file changed

+6
-0
lines changed

1 file changed

+6
-0
lines changed

‎src/backend/utils/adt/pg_locale.c

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,12 @@ pg_perm_setlocale(int category, const char *locale)
183183
*/
184184
if (category==LC_CTYPE)
185185
{
186+
staticcharsave_lc_ctype[LC_ENV_BUFSIZE];
187+
188+
/* copy setlocale() return value before callee invokes it again */
189+
strlcpy(save_lc_ctype,result,sizeof(save_lc_ctype));
190+
result=save_lc_ctype;
191+
186192
#ifdefENABLE_NLS
187193
SetMessageEncoding(pg_bind_textdomain_codeset(textdomain(NULL)));
188194
#else

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp