From: Jeff Davis Date: Mon, 13 Apr 2026 18:19:21 +0000 (-0700) Subject: Fix overrun when comparing with unterminated ICU language string. X-Git-Tag: REL_18_4~69 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6393259bd49db307c7113d70da355544479ee342;p=thirdparty%2Fpostgresql.git Fix overrun when comparing with unterminated ICU language string. The overrun was introduced in commit c4ff35f10. Author: Andreas Karlsson Reported-by: Alexander Lakhin Discussion: https://postgr.es/m/96d80a47-f17f-42fa-82b1-2908efbd6541@gmail.com Backpatch-through: 18 --- diff --git a/src/backend/utils/adt/pg_locale_icu.c b/src/backend/utils/adt/pg_locale_icu.c index ff4541a64f3..4f401a28f0d 100644 --- a/src/backend/utils/adt/pg_locale_icu.c +++ b/src/backend/utils/adt/pg_locale_icu.c @@ -702,7 +702,7 @@ u_strFoldCase_default(UChar *dest, int32_t destCapacity, UErrorCode *pErrorCode) { uint32 options = U_FOLD_CASE_DEFAULT; - char lang[3]; + char lang[ULOC_LANG_CAPACITY]; UErrorCode status; /* @@ -712,8 +712,8 @@ u_strFoldCase_default(UChar *dest, int32_t destCapacity, * languages to enable the option. */ status = U_ZERO_ERROR; - uloc_getLanguage(locale, lang, 3, &status); - if (U_SUCCESS(status)) + uloc_getLanguage(locale, lang, ULOC_LANG_CAPACITY, &status); + if (U_SUCCESS(status) && status != U_STRING_NOT_TERMINATED_WARNING) { /* * The option name is confusing, but it causes u_strFoldCase to use