]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
dict_synonym.c: remove incorrect outlen.
authorJeff Davis <jdavis@postgresql.org>
Mon, 8 Jun 2026 18:47:40 +0000 (11:47 -0700)
committerJeff Davis <jdavis@postgresql.org>
Mon, 8 Jun 2026 18:49:11 +0000 (11:49 -0700)
Previously, outlen was miscalculated if case_sensitive was false and
str_tolower() changed the byte length of the string. If outlen was too
large, pnstrdup() would stop at the NUL terminator, preventing
overrun. But if outlen was too small, it would cause truncation.

Fix by just removing outlen. It was only used in a single site, which
could just as well use pstrdup().

Discussion: https://postgre.es/m/1101e1a3afbbabb503317069c40374b82e6f4cac.camel@j-davis.com
Reviewed-by: Tristan Partin <tristan@partin.io>
Backpatch-through: 14

src/backend/tsearch/dict_synonym.c

index b7a8109143b21a4d69554f887870798e97318098..1ae118305eb53109dbcc5fe8092dff2f226ba00b 100644 (file)
@@ -22,7 +22,6 @@ typedef struct
 {
        char       *in;
        char       *out;
-       int                     outlen;
        uint16          flags;
 } Syn;
 
@@ -187,7 +186,6 @@ dsynonym_init(PG_FUNCTION_ARGS)
                        d->syn[cur].out = lowerstr(starto);
                }
 
-               d->syn[cur].outlen = strlen(starto);
                d->syn[cur].flags = flags;
 
                cur++;
@@ -234,7 +232,7 @@ dsynonym_lexize(PG_FUNCTION_ARGS)
                PG_RETURN_POINTER(NULL);
 
        res = palloc0(sizeof(TSLexeme) * 2);
-       res[0].lexeme = pnstrdup(found->out, found->outlen);
+       res[0].lexeme = pstrdup(found->out);
        res[0].flags = found->flags;
 
        PG_RETURN_POINTER(res);