fix-dangling-tupleslot-pointer.patch
text/x-diff
Filename: fix-dangling-tupleslot-pointer.patch
Type: text/x-diff
Part: 0
Patch
Format: unified
| File | + | − |
|---|---|---|
| src/backend/executor/functions.c | 6 | 1 |
diff --git a/src/backend/executor/functions.c b/src/backend/executor/functions.c
index e0bca7cb81c..37f616280c6 100644
--- a/src/backend/executor/functions.c
+++ b/src/backend/executor/functions.c
@@ -1728,8 +1728,9 @@ fmgr_sql(PG_FUNCTION_ARGS)
elog(ERROR, "failed to fetch lazy-eval tuple");
/* Extract the result as a datum, and copy out from the slot */
result = postquel_get_single_result(slot, fcinfo, fcache);
+ /* Clear the slot, in case it points into the tuplestore */
+ ExecClearTuple(slot);
/* Clear the tuplestore, but keep it for next time */
- /* NB: this might delete the slot's content, but we don't care */
tuplestore_clear(fcache->tstore);
/*
@@ -1810,7 +1811,11 @@ fmgr_sql(PG_FUNCTION_ARGS)
/* Re-use the junkfilter's output slot to fetch back the tuple */
slot = fcache->junkFilter->jf_resultSlot;
if (tuplestore_gettupleslot(fcache->tstore, true, false, slot))
+ {
result = postquel_get_single_result(slot, fcinfo, fcache);
+ /* Clear the slot, in case it points into the tuplestore */
+ ExecClearTuple(slot);
+ }
else
{
fcinfo->isnull = true;