]> 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:27 +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 8c99ecaa0a02ae5465d5bbed9ffe1b8f2ebd9c99..853f07bfd9d9f8805a1b62a875f9cb8818c36941 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);