]> 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:47:40 +0000 (11:47 -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 e44bf876f8b8399fd57179c820d29a9660e081a8..fc39caaddcae6a3f51dd8e4b9cf465891f94dbb3 100644 (file)
@@ -24,7 +24,6 @@ typedef struct
 {
        char       *in;
        char       *out;
-       int                     outlen;
        uint16          flags;
 } Syn;
 
@@ -189,7 +188,6 @@ dsynonym_init(PG_FUNCTION_ARGS)
                        d->syn[cur].out = str_tolower(starto, strlen(starto), DEFAULT_COLLATION_OID);
                }
 
-               d->syn[cur].outlen = strlen(starto);
                d->syn[cur].flags = flags;
 
                cur++;
@@ -236,7 +234,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);