summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2023-09-25 15:50:28 +0000
committerTom Lane2023-09-25 15:50:28 +0000
commit8465efc1a0e721a070221c4aa83695422922b620 (patch)
tree72180cafe86f6d8c5676fc45bb1700ddd2fa42e7
parent9aa3881b2d61a50052d2f5e26a1d941d2d500bd6 (diff)
Limit to_tsvector_byid's initial array allocation to something sane.
The initial estimate of the number of distinct ParsedWords is just that: an estimate. Don't let it exceed what palloc is willing to allocate. If in fact we need more entries, we'll eventually fail trying to enlarge the array. But if we don't, this allows success on inputs that currently draw "invalid memory alloc request size". Per bug #18080 from Uwe Binder. Back-patch to all supported branches. Discussion: https://postgr.es/m/[email protected]
-rw-r--r--src/backend/tsearch/to_tsany.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/backend/tsearch/to_tsany.c b/src/backend/tsearch/to_tsany.c
index 3b6d41f9e8e..fe39d6c4b93 100644
--- a/src/backend/tsearch/to_tsany.c
+++ b/src/backend/tsearch/to_tsany.c
@@ -252,6 +252,8 @@ to_tsvector_byid(PG_FUNCTION_ARGS)
* number */
if (prs.lenwords < 2)
prs.lenwords = 2;
+ else if (prs.lenwords > MaxAllocSize / sizeof(ParsedWord))
+ prs.lenwords = MaxAllocSize / sizeof(ParsedWord);
prs.curwords = 0;
prs.pos = 0;
prs.words = (ParsedWord *) palloc(sizeof(ParsedWord) * prs.lenwords);