]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Fix some cases of indirectly casting away const.
authorTom Lane <tgl@sss.pgh.pa.us>
Wed, 25 Feb 2026 16:19:50 +0000 (11:19 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Wed, 25 Feb 2026 16:19:50 +0000 (11:19 -0500)
Newest versions of gcc+glibc are able to detect cases where code
implicitly casts away const by assigning the result of strchr() or
a similar function applied to a "const char *" value to a target
variable that's just "char *".  This of course creates a hazard of
not getting a compiler warning about scribbling on a string one was
not supposed to, so fixing up such cases is good.

This patch fixes a dozen or so places where we were doing that.
Most are trivial additions of "const" to the target variable,
since no actually-hazardous change was occurring.

Thanks to Bertrand Drouvot for finding a couple more spots than
I had.

This commit back-patches relevant portions of 8f1791c61 and
9f7565c6c into supported branches.  However, there are two
places in ecpg (in v18 only) where a proper fix is more
complicated than seems appropriate for a back-patch.  I opted
to silence those two warnings by adding casts.

Author: Tom Lane <tgl@sss.pgh.pa.us>
Reviewed-by: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
Discussion: https://postgr.es/m/1324889.1764886170@sss.pgh.pa.us
Discussion: https://postgr.es/m/3988414.1771950285@sss.pgh.pa.us
Backpatch-through: 14-18

17 files changed:
src/backend/catalog/pg_type.c
src/backend/tsearch/spell.c
src/backend/utils/adt/formatting.c
src/backend/utils/adt/pg_locale.c
src/backend/utils/adt/xid8funcs.c
src/bin/pg_waldump/pg_waldump.c
src/bin/pgbench/pgbench.c
src/common/compression.c
src/interfaces/ecpg/pgtypeslib/datetime.c
src/interfaces/ecpg/preproc/ecpg.trailer
src/interfaces/ecpg/preproc/variable.c
src/port/chklocale.c
src/port/getopt.c
src/port/getopt_long.c
src/port/win32setlocale.c
src/test/regress/pg_regress.c
src/timezone/zic.c

index b36f81afb9d3ff808a4bea55e7f74ac6bd61c65e..bf15c603a825e2fb6b4c8d3d7d07e53249d4734b 100644 (file)
@@ -950,7 +950,7 @@ char *
 makeMultirangeTypeName(const char *rangeTypeName, Oid typeNamespace)
 {
        char       *buf;
-       char       *rangestr;
+       const char *rangestr;
 
        /*
         * If the range type name contains "range" then change that to
index 0b9ac2e117945ebf519e490de36849ad5f1ea9c9..b58afdce166d0c2f9f556edb5f7c8978dcf88ff3 100644 (file)
@@ -2313,7 +2313,7 @@ CheckCompoundAffixes(CMPDAffix **ptr, const char *word, int len, bool CheckInPla
        }
        else
        {
-               char       *affbegin;
+               const char *affbegin;
 
                while ((*ptr)->affix)
                {
index 0a168fb9ea8ad062b70dfa5aaa94a4f4c58a3986..9c01ce8a7b952c6700c550251343e2adff75c225 100644 (file)
@@ -1038,8 +1038,9 @@ typedef struct NUMProc
        char       *number,                     /* string with number   */
                           *number_p,           /* pointer to current number position */
                           *inout,                      /* in / out buffer      */
-                          *inout_p,            /* pointer to current inout position */
-                          *last_relevant,      /* last relevant number after decimal point */
+                          *inout_p;            /* pointer to current inout position */
+
+       const char *last_relevant,      /* last relevant number after decimal point */
 
                           *L_negative_sign,    /* Locale */
                           *L_positive_sign,
index fc5b842de291933f31461bb3a8a8258f7b820fcd..cb1744f4d69e6c5f65461894c07d284081cb9282 100644 (file)
@@ -982,7 +982,7 @@ get_iso_localename(const char *winlocname)
        wchar_t         wc_locale_name[LOCALE_NAME_MAX_LENGTH];
        wchar_t         buffer[LOCALE_NAME_MAX_LENGTH];
        static char iso_lc_messages[LOCALE_NAME_MAX_LENGTH];
-       char       *period;
+       const char *period;
        int                     len;
        int                     ret_val;
 
index 1da3964ca6fb88084cfa10e773df94c9e64d8cf7..79d9ab29feabb3c71602ddffa49402600fd4bc7a 100644 (file)
@@ -193,7 +193,7 @@ is_visible_fxid(FullTransactionId value, const pg_snapshot *snap)
 #ifdef USE_BSEARCH_IF_NXIP_GREATER
        else if (snap->nxip > USE_BSEARCH_IF_NXIP_GREATER)
        {
-               void       *res;
+               const void *res;
 
                res = bsearch(&value, snap->xip, snap->nxip, sizeof(FullTransactionId),
                                          cmp_fxid);
index 51fb76efc489ef5a5fa6742f0c873111e72cc10d..a3c0368f196b6168e922d4fb523198a333256b8d 100644 (file)
@@ -160,7 +160,7 @@ create_fullpage_directory(char *path)
 static void
 split_path(const char *path, char **dir, char **fname)
 {
-       char       *sep;
+       const char *sep;
 
        /* split filepath into directory & filename */
        sep = strrchr(path, '/');
index 3f7faf79b238073489fe5889ee68f21703f72407..f4dd8c0b474f62a50fe08cd55780249281f95dac 100644 (file)
@@ -6241,7 +6241,7 @@ findBuiltin(const char *name)
 static int
 parseScriptWeight(const char *option, char **script)
 {
-       char       *sep;
+       const char *sep;
        int                     weight;
 
        if ((sep = strrchr(option, WSEP)))
index 4c3c9fd7b507b5e9221e8410342ca4736ecc69e0..eb434542fbdf6e6dcbca0e9d800f9dafb386f5c0 100644 (file)
@@ -425,7 +425,7 @@ validate_compress_specification(pg_compress_specification *spec)
 void
 parse_compress_options(const char *option, char **algorithm, char **detail)
 {
-       char       *sep;
+       const char *sep;
        char       *endp;
        long            result;
 
index 1b253747fc403d7134cf9d2117c482c3c6590429..f43343b459499b53baa3fd6ea297e529fb37d4f7 100644 (file)
@@ -335,8 +335,8 @@ PGTYPESdate_defmt_asc(date * d, const char *fmt, const char *str)
         */
        int                     token[3][2];
        int                     token_values[3] = {-1, -1, -1};
-       char       *fmt_token_order;
-       char       *fmt_ystart,
+       const char *fmt_token_order;
+       const char *fmt_ystart,
                           *fmt_mstart,
                           *fmt_dstart;
        unsigned int i;
index 6f94b832a037f7b8b9377f3eb8ea960670967e26..390e7713bfb2964965e764c91f206583e91ce813 100644 (file)
@@ -1975,7 +1975,7 @@ civarind: cvariable indicator
 
 char_civar: char_variable
        {
-               char       *ptr = strstr(@1, ".arr");
+               char       *ptr = (char *) strstr(@1, ".arr");
 
                if (ptr)                                /* varchar, we need the struct name here, not
                                                                 * the struct element */
index 2c67e33e92e6ac7fa3276f59ab369da66fa1400f..9179b4fb5cf7f3a56259666f960d374907ee8b12 100644 (file)
@@ -197,7 +197,7 @@ find_variable(const char *name)
        struct variable *p;
        int                     count;
 
-       next = strpbrk(name, ".[-");
+       next = (char *) strpbrk(name, ".[-");
        if (next)
        {
                if (*next == '[')
index 034939f7fd2c02ddf02aeda1cc60f585d7c26366..023a7435c9bdaf5ddd58b650cdacb4604bdbb2f2 100644 (file)
@@ -202,7 +202,7 @@ static char *
 win32_get_codeset(const char *ctype)
 {
        char       *r = NULL;
-       char       *codepage;
+       const char *codepage;
        uint32          cp;
        WCHAR           wctype[LOCALE_NAME_MAX_LENGTH];
 
index 655fef3b0c771ce4148ebe3e484c0b8d14d671db..2cca5a0673a5772242077dc463c62a9348ce9473 100644 (file)
@@ -72,7 +72,7 @@ int
 getopt(int nargc, char *const *nargv, const char *ostr)
 {
        static char *place = EMSG;      /* option letter processing */
-       char       *oli;                        /* option letter list index */
+       const char *oli;                        /* option letter list index */
 
        if (!*place)
        {                                                       /* update scanning pointer */
index f83de0dff97894647fff582753d71cb12ab1157d..20953db9db1e649e31bfd51810d9fdec18033d24 100644 (file)
@@ -62,7 +62,7 @@ getopt_long(int argc, char *const argv[],
                        const struct option *longopts, int *longindex)
 {
        static char *place = EMSG;      /* option letter processing */
-       char       *oli;                        /* option letter list index */
+       const char *oli;                        /* option letter list index */
        static int      nonopt_start = -1;
        static bool force_nonopt = false;
 
index 7c0982439dbcddfc0b34f4fa38de13d3dbff0ed4..6e08494613249b3e296d0b260f5431535c3a7ffc 100644 (file)
@@ -119,9 +119,9 @@ map_locale(const struct locale_map *map, const char *locale)
                const char *needle_start = map[i].locale_name_start;
                const char *needle_end = map[i].locale_name_end;
                const char *replacement = map[i].replacement;
-               char       *match;
-               char       *match_start = NULL;
-               char       *match_end = NULL;
+               const char *match;
+               const char *match_start = NULL;
+               const char *match_end = NULL;
 
                match = strstr(locale, needle_start);
                if (match)
@@ -148,7 +148,7 @@ map_locale(const struct locale_map *map, const char *locale)
                        /* Found a match. Replace the matched string. */
                        int                     matchpos = match_start - locale;
                        int                     replacementlen = strlen(replacement);
-                       char       *rest = match_end;
+                       const char *rest = match_end;
                        int                     restlen = strlen(rest);
 
                        /* check that the result fits in the static buffer */
index 5d85dcc62f0a5713b1914badccd1b29f1ec113e9..7862bb2277a6ea4bf209907fd6898b02239108b5 100644 (file)
@@ -693,7 +693,7 @@ static
 const char *
 get_expectfile(const char *testname, const char *file)
 {
-       char       *file_type;
+       const char *file_type;
        _resultmap *rm;
 
        /*
index 3b70b8881805fd163cd9252cc861f76201b6704f..38fff3443940afb8ede3ed316901637e501d5123 100644 (file)
@@ -2631,7 +2631,7 @@ doabbr(char *abbr, struct zone const *zp, char const *letters,
           bool isdst, zic_t save, bool doquotes)
 {
        char       *cp;
-       char       *slashp;
+       char const *slashp;
        size_t          len;
        char const *format = zp->z_format;