From 967d7eb516d8361c595a6775027867ba37fec050 Mon Sep 17 00:00:00 2001
From: Ranier Vilela <ranier.vf@gmail.com>
Date: Wed, 6 Sep 2023 07:51:27 -0300
Subject: [PATCH v1] Avoid a possible dereference a null pointer

If a null locale is reached in this paths.
elog will dereference a null pointer.

While there, by suggestion of Michal Paquier,
fix the words of message to user.

Author: Ranier Vilela (ranier.vf@gmail.com)
Author: Michal Paquier (michael@paquier.xyz)
---
 src/backend/utils/adt/pg_locale.c | 19 ++++++++-----------
 1 file changed, 8 insertions(+), 11 deletions(-)

diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c
index aa9da99308..1e71a62900 100644
--- a/src/backend/utils/adt/pg_locale.c
+++ b/src/backend/utils/adt/pg_locale.c
@@ -2393,17 +2393,15 @@ pg_strxfrm_prefix(char *dest, const char *src, size_t destsize,
 {
 	size_t		result = 0;		/* keep compiler quiet */
 
-	if (!locale || locale->provider == COLLPROVIDER_LIBC)
-		elog(ERROR, "collprovider '%c' does not support pg_strxfrm_prefix()",
-			 locale->provider);
+	if (!locale)
+		elog(ERROR, "unsupported collprovider");
 #ifdef USE_ICU
 	else if (locale->provider == COLLPROVIDER_ICU)
 		result = pg_strnxfrm_prefix_icu(dest, src, -1, destsize, locale);
 #endif
 	else
-		/* shouldn't happen */
-		elog(ERROR, "unsupported collprovider: %c", locale->provider);
-
+		elog(ERROR, "could not use collprovider %c: no support for %s",
+			locale->provider, "pg_strxfrm_prefix");
 	return result;
 }
 
@@ -2430,16 +2428,15 @@ pg_strnxfrm_prefix(char *dest, size_t destsize, const char *src,
 {
 	size_t		result = 0;		/* keep compiler quiet */
 
-	if (!locale || locale->provider == COLLPROVIDER_LIBC)
-		elog(ERROR, "collprovider '%c' does not support pg_strnxfrm_prefix()",
-			 locale->provider);
+	if (!locale)
+		elog(ERROR, "unsupported collprovider");
 #ifdef USE_ICU
 	else if (locale->provider == COLLPROVIDER_ICU)
 		result = pg_strnxfrm_prefix_icu(dest, src, -1, destsize, locale);
 #endif
 	else
-		/* shouldn't happen */
-		elog(ERROR, "unsupported collprovider: %c", locale->provider);
+		elog(ERROR, "could not use collprovider %c: no support for %s",
+			locale->provider, "pg_strnxfrm_prefix");
 
 	return result;
 }
-- 
2.32.0.windows.1

