]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix overrun when comparing with unterminated ICU language string.
authorJeff Davis <jdavis@postgresql.org>
Mon, 13 Apr 2026 18:19:21 +0000 (11:19 -0700)
committerJeff Davis <jdavis@postgresql.org>
Mon, 13 Apr 2026 18:19:21 +0000 (11:19 -0700)
The overrun was introduced in commit c4ff35f10.

Author: Andreas Karlsson <andreas@proxel.se>
Reported-by: Alexander Lakhin <exclusion@gmail.com>
Discussion: https://postgr.es/m/96d80a47-f17f-42fa-82b1-2908efbd6541@gmail.com
Backpatch-through: 18

src/backend/utils/adt/pg_locale_icu.c

index ff4541a64f3fd2d41fa64b42653f309333da1645..4f401a28f0d2698def4c62efc6acf50e93b7e875 100644 (file)
@@ -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