diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2004-10-01 20:39:54 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2004-10-01 20:39:54 +0000 |
commit | b62aa83f0e1f73da704a00ecfb0e2523dc1f27de (patch) | |
tree | 3994fd00a5b99ea8b360cc22ca071232e4d720e4 /src | |
parent | c8196c87a76b86c514e1f245624a21ab068c9012 (diff) | |
download | postgresql-b62aa83f0e1f73da704a00ecfb0e2523dc1f27de.tar.gz postgresql-b62aa83f0e1f73da704a00ecfb0e2523dc1f27de.zip |
fmgr_security_definer had better do a PG_TRY to ensure the outer userid
is restored on error exit.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/utils/fmgr/fmgr.c | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/src/backend/utils/fmgr/fmgr.c b/src/backend/utils/fmgr/fmgr.c index b963fd86e9e..b3f6ec0f5ef 100644 --- a/src/backend/utils/fmgr/fmgr.c +++ b/src/backend/utils/fmgr/fmgr.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $PostgreSQL: pgsql/src/backend/utils/fmgr/fmgr.c,v 1.84 2004/09/13 01:44:46 neilc Exp $ + * $PostgreSQL: pgsql/src/backend/utils/fmgr/fmgr.c,v 1.85 2004/10/01 20:39:54 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -794,7 +794,7 @@ fmgr_security_definer(PG_FUNCTION_ARGS) { Datum result; FmgrInfo *save_flinfo; - struct fmgr_security_definer_cache *fcache; + struct fmgr_security_definer_cache * volatile fcache; AclId save_userid; HeapTuple tuple; @@ -821,14 +821,25 @@ fmgr_security_definer(PG_FUNCTION_ARGS) fcache = fcinfo->flinfo->fn_extra; save_flinfo = fcinfo->flinfo; - fcinfo->flinfo = &fcache->flinfo; - save_userid = GetUserId(); - SetUserId(fcache->userid); - result = FunctionCallInvoke(fcinfo); - SetUserId(save_userid); + + PG_TRY(); + { + fcinfo->flinfo = &fcache->flinfo; + SetUserId(fcache->userid); + + result = FunctionCallInvoke(fcinfo); + } + PG_CATCH(); + { + fcinfo->flinfo = save_flinfo; + SetUserId(save_userid); + PG_RE_THROW(); + } + PG_END_TRY(); fcinfo->flinfo = save_flinfo; + SetUserId(save_userid); return result; } |