diff options
author | Tom Lane | 2015-05-28 15:24:37 +0000 |
---|---|---|
committer | Tom Lane | 2015-05-28 15:24:37 +0000 |
commit | d4a9f5519d300aeae813a872b3c9874a7e02564b (patch) | |
tree | 551eb42aa7a5bb134c51a1933f1b0cd1e50ccfb1 | |
parent | 269cb4fbcad116d3ec497326f166b6690a6ffbd5 (diff) |
Fix pg_get_functiondef() to print a function's LEAKPROOF property.
Seems to have been an oversight in the original leakproofness patch.
Per report and patch from Jeevan Chalke.
In passing, prettify some awkward leakproof-related code in AlterFunction.
-rw-r--r-- | src/backend/commands/functioncmds.c | 4 | ||||
-rw-r--r-- | src/backend/utils/adt/ruleutils.c | 2 |
2 files changed, 4 insertions, 2 deletions
diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index 470db5705cc..8382b1b224c 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -1134,11 +1134,11 @@ AlterFunction(AlterFunctionStmt *stmt) procForm->prosecdef = intVal(security_def_item->arg); if (leakproof_item) { - if (intVal(leakproof_item->arg) && !superuser()) + procForm->proleakproof = intVal(leakproof_item->arg); + if (procForm->proleakproof && !superuser()) ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), errmsg("only superuser can define a leakproof function"))); - procForm->proleakproof = intVal(leakproof_item->arg); } if (cost_item) { diff --git a/src/backend/utils/adt/ruleutils.c b/src/backend/utils/adt/ruleutils.c index 96797672396..6400fa0de3d 100644 --- a/src/backend/utils/adt/ruleutils.c +++ b/src/backend/utils/adt/ruleutils.c @@ -1974,6 +1974,8 @@ pg_get_functiondef(PG_FUNCTION_ARGS) appendStringInfoString(&buf, " STRICT"); if (proc->prosecdef) appendStringInfoString(&buf, " SECURITY DEFINER"); + if (proc->proleakproof) + appendStringInfoString(&buf, " LEAKPROOF"); /* This code for the default cost and rows should match functioncmds.c */ if (proc->prolang == INTERNALlanguageId || |