pgsql: Avoid premature free of pass-by-reference CALL arguments.
От | Tom Lane |
---|---|
Тема | pgsql: Avoid premature free of pass-by-reference CALL arguments. |
Дата | |
Msg-id | E1eka1V-0002Ed-A3@gemulon.postgresql.org обсуждение исходный текст |
Ответы |
Re: pgsql: Avoid premature free of pass-by-reference CALL arguments.
Re: pgsql: Avoid premature free of pass-by-reference CALL arguments. |
Список | pgsql-committers |
Avoid premature free of pass-by-reference CALL arguments. Prematurely freeing the EState used to evaluate CALL arguments led, in some cases, to passing dangling pointers to the procedure. This was masked in trivial cases because the argument pointers would point to Const nodes in the original expression tree, and in some other cases because the result value would end up in the standalone ExprContext rather than in memory belonging to the EState --- but that wasn't exactly high quality programming either, because the standalone ExprContext was never explicitly freed, breaking assorted API contracts. In addition, using a separate EState for each argument was just silly. So let's use just one EState, and one ExprContext, and make the latter belong to the former rather than be standalone, and clean up the EState (and hence the ExprContext) post-call. While at it, improve the function's commentary a bit. Discussion: https://postgr.es/m/29173.1518282748@sss.pgh.pa.us Branch ------ master Details ------- https://git.postgresql.org/pg/commitdiff/d02d4a6d4f27c223f48b03a5e651a22c8460b3c4 Modified Files -------------- src/backend/commands/functioncmds.c | 28 ++++++++++++++++++++------ src/test/regress/expected/create_procedure.out | 12 +++++++---- src/test/regress/sql/create_procedure.sql | 4 +++- 3 files changed, 33 insertions(+), 11 deletions(-)
В списке pgsql-committers по дате отправления: