aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Munro <tmunro@postgresql.org>2023-04-20 13:15:23 +1200
committerThomas Munro <tmunro@postgresql.org>2023-04-20 13:20:14 +1200
commit7d3d72b55edd1b7552a9a358991555994efab0e9 (patch)
treeb85a8ccca7b6f7027e0c511f26ebf6b928a3918b
parente35ded29566f679e52888a8d34468bb51bc78bed (diff)
downloadpostgresql-7d3d72b55edd1b7552a9a358991555994efab0e9.tar.gz
postgresql-7d3d72b55edd1b7552a9a358991555994efab0e9.zip
Remove obsolete defense against strxfrm() bugs.
Old versions of Solaris and illumos had buffer overrun bugs in their strxfrm() implementations. The bugs were fixed more than a decade ago and the relevant releases are long out of vendor support. It's time to remove the defense added by commit be8b06c3. Reviewed-by: Nathan Bossart <nathandbossart@gmail.com> Reviewed-by: Tom Lane <tgl@sss.pgh.pa.us> Discussion: https://postgr.es/m/CA+hUKGJ-ZPJwKHVLbqye92-ZXeLoCHu5wJL6L6HhNP7FkJ=meA@mail.gmail.com
-rw-r--r--src/backend/main/main.c2
-rw-r--r--src/backend/utils/adt/pg_locale.c58
-rw-r--r--src/backend/utils/init/postinit.c2
-rw-r--r--src/include/utils/pg_locale.h1
4 files changed, 0 insertions, 63 deletions
diff --git a/src/backend/main/main.c b/src/backend/main/main.c
index 43978fd359c..ed11e8be7fa 100644
--- a/src/backend/main/main.c
+++ b/src/backend/main/main.c
@@ -137,8 +137,6 @@ main(int argc, char *argv[])
*/
unsetenv("LC_ALL");
- check_strxfrm_bug();
-
/*
* Catch standard options before doing much else, in particular before we
* insist on not being root.
diff --git a/src/backend/utils/adt/pg_locale.c b/src/backend/utils/adt/pg_locale.c
index 092b620673f..51df570ce99 100644
--- a/src/backend/utils/adt/pg_locale.c
+++ b/src/backend/utils/adt/pg_locale.c
@@ -1163,64 +1163,6 @@ IsoLocaleName(const char *winlocname)
/*
- * Detect aging strxfrm() implementations that, in a subset of locales, write
- * past the specified buffer length. Affected users must update OS packages
- * before using PostgreSQL 9.5 or later.
- *
- * Assume that the bug can come and go from one postmaster startup to another
- * due to physical replication among diverse machines. Assume that the bug's
- * presence will not change during the life of a particular postmaster. Given
- * those assumptions, call this no less than once per postmaster startup per
- * LC_COLLATE setting used. No known-affected system offers strxfrm_l(), so
- * there is no need to consider pg_collation locales.
- */
-void
-check_strxfrm_bug(void)
-{
- char buf[32];
- const int canary = 0x7F;
- bool ok = true;
-
- /*
- * Given a two-byte ASCII string and length limit 7, 8 or 9, Solaris 10
- * 05/08 returns 18 and modifies 10 bytes. It respects limits above or
- * below that range.
- *
- * The bug is present in Solaris 8 as well; it is absent in Solaris 10
- * 01/13 and Solaris 11.2. Affected locales include is_IS.ISO8859-1,
- * en_US.UTF-8, en_US.ISO8859-1, and ru_RU.KOI8-R. Unaffected locales
- * include de_DE.UTF-8, de_DE.ISO8859-1, zh_TW.UTF-8, and C.
- */
- buf[7] = canary;
- (void) strxfrm(buf, "ab", 7);
- if (buf[7] != canary)
- ok = false;
-
- /*
- * illumos bug #1594 was present in the source tree from 2010-10-11 to
- * 2012-02-01. Given an ASCII string of any length and length limit 1,
- * affected systems ignore the length limit and modify a number of bytes
- * one less than the return value. The problem inputs for this bug do not
- * overlap those for the Solaris bug, hence a distinct test.
- *
- * Affected systems include smartos-20110926T021612Z. Affected locales
- * include en_US.ISO8859-1 and en_US.UTF-8. Unaffected locales include C.
- */
- buf[1] = canary;
- (void) strxfrm(buf, "a", 1);
- if (buf[1] != canary)
- ok = false;
-
- if (!ok)
- ereport(ERROR,
- (errcode(ERRCODE_SYSTEM_ERROR),
- errmsg_internal("strxfrm(), in locale \"%s\", writes past the specified array length",
- setlocale(LC_COLLATE, NULL)),
- errhint("Apply system library package updates.")));
-}
-
-
-/*
* Cache mechanism for collation information.
*
* We cache two flags: whether the collation's LC_COLLATE or LC_CTYPE is C
diff --git a/src/backend/utils/init/postinit.c b/src/backend/utils/init/postinit.c
index 5af87a78683..53420f4974f 100644
--- a/src/backend/utils/init/postinit.c
+++ b/src/backend/utils/init/postinit.c
@@ -487,8 +487,6 @@ CheckMyDatabase(const char *name, bool am_superuser, bool override_allow_connect
SetConfigOption("lc_collate", collate, PGC_INTERNAL, PGC_S_DYNAMIC_DEFAULT);
SetConfigOption("lc_ctype", ctype, PGC_INTERNAL, PGC_S_DYNAMIC_DEFAULT);
- check_strxfrm_bug();
-
ReleaseSysCache(tup);
}
diff --git a/src/include/utils/pg_locale.h b/src/include/utils/pg_locale.h
index 8c095abc524..03ab5982158 100644
--- a/src/include/utils/pg_locale.h
+++ b/src/include/utils/pg_locale.h
@@ -53,7 +53,6 @@ extern PGDLLIMPORT bool database_ctype_is_c;
extern bool check_locale(int category, const char *locale, char **canonname);
extern char *pg_perm_setlocale(int category, const char *locale);
-extern void check_strxfrm_bug(void);
extern bool lc_collate_is_c(Oid collation);
extern bool lc_ctype_is_c(Oid collation);