]> 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:53 +0000 (11:47 -0700)
committerJeff Davis <jdavis@postgresql.org>
Mon, 8 Jun 2026 18:47:53 +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 3937f25bcc6cae65b2cd24670e2a0b812c5fc119..24345767658a4eaf0062d8f65962d52658eac52e 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++;
@@ -237,7 +235,7 @@ dsynonym_lexize(PG_FUNCTION_ARGS)
                PG_RETURN_POINTER(NULL);
 
        res = palloc0_array(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);