mirror of
https://github.com/postgres/postgres.git
synced 2026-10-23 13:29:09 +03:00
pg_locale.c: Fix REL_18_STABLE for srclen < 0.
Ensure that srclen >= 0 before calling strlower_c(), etc. Commit5f003855e7backported strlower_c(), etc., to 18, but did not account for the srclen < 0 behavior that existed in 18 (and was removed later in version 19 with commit6d22c67c3b). No callers in core use the srclen < 0 behavior, but it's possible (though unlikely) that extensions do. This applies to REL_18_STABLE only. Discussion: https://postgr.es/m/v36ssaygf7grb3qzfsjhtdzi7kqd45ds56nyuf7gi5qjml4qbb@ezmfqzmhlrs2
This commit is contained in:
@@ -1328,6 +1328,8 @@ size_t
|
||||
pg_strlower(char *dst, size_t dstsize, const char *src, ssize_t srclen,
|
||||
pg_locale_t locale)
|
||||
{
|
||||
srclen = (srclen < 0) ? strlen(src) : srclen;
|
||||
|
||||
if (locale->ctype_is_c)
|
||||
return strlower_c(dst, dstsize, src, srclen);
|
||||
else if (locale->provider == COLLPROVIDER_BUILTIN)
|
||||
@@ -1349,6 +1351,8 @@ size_t
|
||||
pg_strtitle(char *dst, size_t dstsize, const char *src, ssize_t srclen,
|
||||
pg_locale_t locale)
|
||||
{
|
||||
srclen = (srclen < 0) ? strlen(src) : srclen;
|
||||
|
||||
if (locale->ctype_is_c)
|
||||
return strtitle_c(dst, dstsize, src, srclen);
|
||||
else if (locale->provider == COLLPROVIDER_BUILTIN)
|
||||
@@ -1370,6 +1374,8 @@ size_t
|
||||
pg_strupper(char *dst, size_t dstsize, const char *src, ssize_t srclen,
|
||||
pg_locale_t locale)
|
||||
{
|
||||
srclen = (srclen < 0) ? strlen(src) : srclen;
|
||||
|
||||
if (locale->ctype_is_c)
|
||||
return strupper_c(dst, dstsize, src, srclen);
|
||||
else if (locale->provider == COLLPROVIDER_BUILTIN)
|
||||
@@ -1391,6 +1397,8 @@ size_t
|
||||
pg_strfold(char *dst, size_t dstsize, const char *src, ssize_t srclen,
|
||||
pg_locale_t locale)
|
||||
{
|
||||
srclen = (srclen < 0) ? strlen(src) : srclen;
|
||||
|
||||
/* in the C locale, casefolding is the same as lowercasing */
|
||||
if (locale->ctype_is_c)
|
||||
return strlower_c(dst, dstsize, src, srclen);
|
||||
|
||||
Reference in New Issue
Block a user