diff options
author | Jeff Davis <jdavis@postgresql.org> | 2025-04-16 16:46:22 -0700 |
---|---|---|
committer | Jeff Davis <jdavis@postgresql.org> | 2025-04-16 16:49:42 -0700 |
commit | 2e5353be2534aed99a714f99c8a193f85777e64a (patch) | |
tree | 9839cb8d42246e13790e665d7d6a29d94c3e9e30 /src | |
parent | b107744ce73782a996aaa65dfd9d1bb3c543503d (diff) | |
download | postgresql-2e5353be2534aed99a714f99c8a193f85777e64a.tar.gz postgresql-2e5353be2534aed99a714f99c8a193f85777e64a.zip |
Another unintentional behavior change in commit e9931bfb75.
Reported-by: Noah Misch <noah@leadboat.com>
Reviewed-by: Noah Misch <noah@leadboat.com>
Discussion: https://postgr.es/m/20250412123430.8c.nmisch@google.com
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/regex/regc_pg_locale.c | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/src/backend/regex/regc_pg_locale.c b/src/backend/regex/regc_pg_locale.c index ffc787cd7b4..78193cfb964 100644 --- a/src/backend/regex/regc_pg_locale.c +++ b/src/backend/regex/regc_pg_locale.c @@ -559,10 +559,16 @@ pg_wc_toupper(pg_wchar c) case PG_REGEX_STRATEGY_BUILTIN: return unicode_uppercase_simple(c); case PG_REGEX_STRATEGY_LIBC_WIDE: + /* force C behavior for ASCII characters, per comments above */ + if (pg_regex_locale->is_default && c <= (pg_wchar) 127) + return pg_ascii_toupper((unsigned char) c); if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF) return towupper_l((wint_t) c, pg_regex_locale->info.lt); /* FALL THRU */ case PG_REGEX_STRATEGY_LIBC_1BYTE: + /* force C behavior for ASCII characters, per comments above */ + if (pg_regex_locale->is_default && c <= (pg_wchar) 127) + return pg_ascii_toupper((unsigned char) c); if (c <= (pg_wchar) UCHAR_MAX) return toupper_l((unsigned char) c, pg_regex_locale->info.lt); return c; @@ -587,10 +593,16 @@ pg_wc_tolower(pg_wchar c) case PG_REGEX_STRATEGY_BUILTIN: return unicode_lowercase_simple(c); case PG_REGEX_STRATEGY_LIBC_WIDE: + /* force C behavior for ASCII characters, per comments above */ + if (pg_regex_locale->is_default && c <= (pg_wchar) 127) + return pg_ascii_tolower((unsigned char) c); if (sizeof(wchar_t) >= 4 || c <= (pg_wchar) 0xFFFF) return towlower_l((wint_t) c, pg_regex_locale->info.lt); /* FALL THRU */ case PG_REGEX_STRATEGY_LIBC_1BYTE: + /* force C behavior for ASCII characters, per comments above */ + if (pg_regex_locale->is_default && c <= (pg_wchar) 127) + return pg_ascii_tolower((unsigned char) c); if (c <= (pg_wchar) UCHAR_MAX) return tolower_l((unsigned char) c, pg_regex_locale->info.lt); return c; |