]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Separate read and write pointers in pg_saslprep
authorPeter Eisentraut <peter@eisentraut.org>
Mon, 5 Jan 2026 09:50:27 +0000 (10:50 +0100)
committerPeter Eisentraut <peter@eisentraut.org>
Mon, 5 Jan 2026 10:03:49 +0000 (11:03 +0100)
Use separate pointers for reading const input ('p') and writing to
mutable output ('outp'), avoiding the need to cast away const on the
input parameter.

Author: Bertrand Drouvot <bertranddrouvot.pg@gmail.com>
Discussion: https://postgr.es/m/aUQHy/MmWq7c97wK%40ip-10-97-1-34.eu-west-3.compute.internal

src/common/saslprep.c

index 04d5cca284d20747fba9780b7ca24a63aea25b77..2ad2cefc14fbdf368cb9267dc7d970f80feccf9e 100644 (file)
@@ -1054,7 +1054,8 @@ pg_saslprep(const char *input, char **output)
        int                     count;
        int                     i;
        bool            contains_RandALCat;
-       unsigned char *p;
+       const unsigned char *p;
+       unsigned char *outp;
        char32_t   *wp;
 
        /* Ensure we return *output as NULL on failure */
@@ -1087,7 +1088,7 @@ pg_saslprep(const char *input, char **output)
        if (!input_chars)
                goto oom;
 
-       p = (unsigned char *) input;
+       p = (const unsigned char *) input;
        for (i = 0; i < input_size; i++)
        {
                input_chars[i] = utf8_to_unicode(p);
@@ -1217,14 +1218,14 @@ pg_saslprep(const char *input, char **output)
         * There are no error exits below here, so the error exit paths don't need
         * to worry about possibly freeing "result".
         */
-       p = (unsigned char *) result;
+       outp = (unsigned char *) result;
        for (wp = output_chars; *wp; wp++)
        {
-               unicode_to_utf8(*wp, p);
-               p += pg_utf_mblen(p);
+               unicode_to_utf8(*wp, outp);
+               outp += pg_utf_mblen(outp);
        }
-       Assert((char *) p == result + result_size);
-       *p = '\0';
+       Assert((char *) outp == result + result_size);
+       *outp = '\0';
 
        FREE(input_chars);
        FREE(output_chars);