pgsql: Prevent buffer overrun in spell.c's CheckAffix(). - Mailing list pgsql-committers

From Tom Lane
Subject pgsql: Prevent buffer overrun in spell.c's CheckAffix().
Date
Msg-id E1wFZDM-002B63-0I@gemulon.postgresql.org
Whole thread
List pgsql-committers
Prevent buffer overrun in spell.c's CheckAffix().

This function writes into a caller-supplied buffer of length
2 * MAXNORMLEN, which should be plenty in real-world cases.
However a malicious affix file could supply an affix long
enough to overrun that.  Defend by just rejecting the match
if it would overrun the buffer.  I also inserted a check of
the input word length against Affix->replen, just to be sure
we won't index off the buffer, though it would be caller error
for that not to be true.

Also make the actual copying steps a bit more readable, and remove
an unnecessary requirement for the whole input word to fit into the
output buffer (even though it always will with the current caller).

The lack of documentation in this code makes my head hurt, so
I also reverse-engineered a basic header comment for CheckAffix.

Reported-by: Xint Code
Author: Tom Lane <tgl@sss.pgh.pa.us>
Reviewed-by: Andrey Borodin <x4mmm@yandex-team.ru>
Discussion: https://postgr.es/m/641711.1776792744@sss.pgh.pa.us
Backpatch-through: 14

Branch
------
REL_14_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/6cae0c2bd2119103a17d21bfd9982e41345b394d

Modified Files
--------------
src/backend/tsearch/spell.c | 47 +++++++++++++++++++++++++++++++++++++++------
1 file changed, 41 insertions(+), 6 deletions(-)


pgsql-committers by date:

Previous
From: Alexander Korotkov
Date:
Subject: pgsql: Preserve extension dependencies on indexes during partition merg
Next
From: Tom Lane
Date:
Subject: pgsql: Prevent some buffer overruns in spell.c's parsing of affix files