pglocale-elogs-v3.patch

application/octet-stream

Filename: pglocale-elogs-v3.patch
Type: application/octet-stream
Part: 0
Message: Re: Avoid a possible null pointer (src/backend/utils/adt/pg_locale.c)

Patch

Format: unified
Series: patch v3
File+
src/backend/utils/adt/pg_locale.c 31 13
diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c
index 1e71a62900..9c7b66c05c 100644
--- a/src/backend/utils/adt/pg_locale.c
+++ b/src/backend/utils/adt/pg_locale.c
@@ -2031,7 +2031,8 @@ pg_strcoll(const char *arg1, const char *arg2, pg_locale_t locale)
 #endif
 	else
 		/* shouldn't happen */
-		elog(ERROR, "unsupported collprovider: %c", locale->provider);
+		elog(ERROR, "unsupported collprovider (%s): %c",
+			 "pg_strcoll", locale->provider);
 
 	return result;
 }
@@ -2067,7 +2068,8 @@ pg_strncoll(const char *arg1, size_t len1, const char *arg2, size_t len2,
 #endif
 	else
 		/* shouldn't happen */
-		elog(ERROR, "unsupported collprovider: %c", locale->provider);
+		elog(ERROR, "unsupported collprovider (%s): %c",
+			 "pg_strncoll", locale->provider);
 
 	return result;
 }
@@ -2086,7 +2088,8 @@ pg_strxfrm_libc(char *dest, const char *src, size_t destsize,
 		return strxfrm(dest, src, destsize);
 #else
 	/* shouldn't happen */
-	elog(ERROR, "unsupported collprovider: %c", locale->provider);
+	elog(ERROR, "unsupported collprovider (%s): %c",
+		 "pg_strxfrm_libc", locale->provider);
 	return 0;					/* keep compiler quiet */
 #endif
 }
@@ -2282,7 +2285,8 @@ pg_strxfrm_enabled(pg_locale_t locale)
 		return true;
 	else
 		/* shouldn't happen */
-		elog(ERROR, "unsupported collprovider: %c", locale->provider);
+		elog(ERROR, "unsupported collprovider (%s): %c",
+			 "pg_strxfrm_enabled", locale->provider);
 
 	return false;				/* keep compiler quiet */
 }
@@ -2314,7 +2318,8 @@ pg_strxfrm(char *dest, const char *src, size_t destsize, pg_locale_t locale)
 #endif
 	else
 		/* shouldn't happen */
-		elog(ERROR, "unsupported collprovider: %c", locale->provider);
+		elog(ERROR, "unsupported collprovider (%s): %c",
+			 "pg_strxfrm", locale->provider);
 
 	return result;
 }
@@ -2351,7 +2356,8 @@ pg_strnxfrm(char *dest, size_t destsize, const char *src, size_t srclen,
 #endif
 	else
 		/* shouldn't happen */
-		elog(ERROR, "unsupported collprovider: %c", locale->provider);
+		elog(ERROR, "unsupported collprovider (%s): %c",
+			 "pg_strnxfrm", locale->provider);
 
 	return result;
 }
@@ -2369,7 +2375,8 @@ pg_strxfrm_prefix_enabled(pg_locale_t locale)
 		return true;
 	else
 		/* shouldn't happen */
-		elog(ERROR, "unsupported collprovider: %c", locale->provider);
+		elog(ERROR, "unsupported collprovider (%s): %c",
+			 "pg_strxfrm_prefix_enabled", locale->provider);
 
 	return false;				/* keep compiler quiet */
 }
@@ -2393,15 +2400,21 @@ pg_strxfrm_prefix(char *dest, const char *src, size_t destsize,
 {
 	size_t		result = 0;		/* keep compiler quiet */
 
+	/*
+	 * if locale is NULL, then
+	 * the provider is known to be COLLPROVIDER_LIBC
+	 */
 	if (!locale)
-		elog(ERROR, "unsupported collprovider");
+		elog(ERROR, "collprovider '%c' does not support (%s)", 
+			COLLPROVIDER_LIBC, "pg_strxfrm_prefix");
 #ifdef USE_ICU
 	else if (locale->provider == COLLPROVIDER_ICU)
 		result = pg_strnxfrm_prefix_icu(dest, src, -1, destsize, locale);
 #endif
 	else
-		elog(ERROR, "could not use collprovider %c: no support for %s",
-			locale->provider, "pg_strxfrm_prefix");
+		elog(ERROR, "unsupported collprovider (%s): %c",
+			 "pg_strxfrm_prefix", locale->provider);
+
 	return result;
 }
 
@@ -2428,15 +2441,20 @@ pg_strnxfrm_prefix(char *dest, size_t destsize, const char *src,
 {
 	size_t		result = 0;		/* keep compiler quiet */
 
+	/*
+	 * if locale is NULL, then
+	 * the provider is known to be COLLPROVIDER_LIBC
+	 */
 	if (!locale)
-		elog(ERROR, "unsupported collprovider");
+		elog(ERROR, "collprovider '%c' does not support (%s)",
+			COLLPROVIDER_LIBC, "pg_strnxfrm_prefix");
 #ifdef USE_ICU
 	else if (locale->provider == COLLPROVIDER_ICU)
 		result = pg_strnxfrm_prefix_icu(dest, src, -1, destsize, locale);
 #endif
 	else
-		elog(ERROR, "could not use collprovider %c: no support for %s",
-			locale->provider, "pg_strnxfrm_prefix");
+		elog(ERROR, "unsupported collprovider (%s): %c",
+			 "pg_strnxfrm_prefix", locale->provider);
 
 	return result;
 }