v4-0008-No-longer-accept-NULL-for-wchar2char-char2wchar.patch
text/x-patch
Filename: v4-0008-No-longer-accept-NULL-for-wchar2char-char2wchar.patch
Type: text/x-patch
Part: 7
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: format-patch
Series: patch v4-0008
Subject: No longer accept NULL for wchar2char()/char2wchar().
| File | + | − |
|---|---|---|
| src/backend/utils/adt/pg_locale.c | 1 | 1 |
| src/backend/utils/adt/pg_locale_libc.c | 5 | 19 |
From 70b7e1012daec72641d866bf09385933a98d1d42 Mon Sep 17 00:00:00 2001
From: Jeff Davis <jeff@j-davis.com>
Date: Mon, 7 Jul 2025 15:43:48 -0700
Subject: [PATCH v4 8/8] No longer accept NULL for wchar2char()/char2wchar().
Avoid dependence on setlocale().
Discussion: https://postgr.es/m/9875f7f9-50f1-4b5d-86fc-ee8b03e8c162@eisentraut.org
---
src/backend/utils/adt/pg_locale.c | 2 +-
src/backend/utils/adt/pg_locale_libc.c | 24 +++++-------------------
2 files changed, 6 insertions(+), 20 deletions(-)
diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c
index 97c2ac1faf9..ce50e9e15d0 100644
--- a/src/backend/utils/adt/pg_locale.c
+++ b/src/backend/utils/adt/pg_locale.c
@@ -998,7 +998,7 @@ get_iso_localename(const char *winlocname)
char *hyphen;
/* Locale names use only ASCII, any conversion locale suffices. */
- rc = wchar2char(iso_lc_messages, buffer, sizeof(iso_lc_messages), NULL);
+ rc = wchar2char(iso_lc_messages, buffer, sizeof(iso_lc_messages), LC_C_LOCALE);
if (rc == -1 || rc == sizeof(iso_lc_messages))
return NULL;
diff --git a/src/backend/utils/adt/pg_locale_libc.c b/src/backend/utils/adt/pg_locale_libc.c
index 33a082b6490..4013771e301 100644
--- a/src/backend/utils/adt/pg_locale_libc.c
+++ b/src/backend/utils/adt/pg_locale_libc.c
@@ -1169,6 +1169,8 @@ wchar2char(char *to, const wchar_t *from, size_t tolen, locale_t loc)
{
size_t result;
+ Assert(loc != NULL);
+
if (tolen == 0)
return 0;
@@ -1195,16 +1197,7 @@ wchar2char(char *to, const wchar_t *from, size_t tolen, locale_t loc)
}
else
#endif /* WIN32 */
- if (loc == (locale_t) 0)
- {
- /* Use wcstombs directly for the default locale */
- result = wcstombs(to, from, tolen);
- }
- else
- {
- /* Use wcstombs_l for nondefault locales */
result = wcstombs_l(to, from, tolen, loc);
- }
return result;
}
@@ -1224,6 +1217,8 @@ char2wchar(wchar_t *to, size_t tolen, const char *from, size_t fromlen,
{
size_t result;
+ Assert(loc != NULL);
+
if (tolen == 0)
return 0;
@@ -1255,16 +1250,7 @@ char2wchar(wchar_t *to, size_t tolen, const char *from, size_t fromlen,
/* mbstowcs requires ending '\0' */
char *str = pnstrdup(from, fromlen);
- if (loc == (locale_t) 0)
- {
- /* Use mbstowcs directly for the default locale */
- result = mbstowcs(to, str, tolen);
- }
- else
- {
- /* Use mbstowcs_l for nondefault locales */
- result = mbstowcs_l(to, str, tolen, loc);
- }
+ result = mbstowcs_l(to, str, tolen, loc);
pfree(str);
}
--
2.43.0