Commit 6dd9f357 authored by Tom Lane's avatar Tom Lane

Fix bogus CALLED_AS_TRIGGER() defenses.

contrib/lo's lo_manage() thought it could use
trigdata->tg_trigger->tgname in its error message about
not being called as a trigger.  That naturally led to a core dump.

unique_key_recheck() figured it could Assert that fcinfo->context
is a TriggerData node in advance of having checked that it's
being called as a trigger.  That's harmless in production builds,
and perhaps not that easy to reach in any case, but it's logically
wrong.

The first of these per bug #16340 from William Crowell;
the second from manual inspection of other CALLED_AS_TRIGGER
call sites.

Back-patch the lo.c change to all supported branches, the
other to v10 where the thinko crept in.

Discussion: https://postgr.es/m/16340-591c7449dc7c8c47@postgresql.org
parent 19db23bc
...@@ -33,8 +33,7 @@ lo_manage(PG_FUNCTION_ARGS) ...@@ -33,8 +33,7 @@ lo_manage(PG_FUNCTION_ARGS)
HeapTuple trigtuple; /* The original value of tuple */ HeapTuple trigtuple; /* The original value of tuple */
if (!CALLED_AS_TRIGGER(fcinfo)) /* internal error */ if (!CALLED_AS_TRIGGER(fcinfo)) /* internal error */
elog(ERROR, "%s: not fired by trigger manager", elog(ERROR, "lo_manage: not fired by trigger manager");
trigdata->tg_trigger->tgname);
if (!TRIGGER_FIRED_FOR_ROW(trigdata->tg_event)) /* internal error */ if (!TRIGGER_FIRED_FOR_ROW(trigdata->tg_event)) /* internal error */
elog(ERROR, "%s: must be fired for row", elog(ERROR, "%s: must be fired for row",
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
Datum Datum
unique_key_recheck(PG_FUNCTION_ARGS) unique_key_recheck(PG_FUNCTION_ARGS)
{ {
TriggerData *trigdata = castNode(TriggerData, fcinfo->context); TriggerData *trigdata = (TriggerData *) fcinfo->context;
const char *funcname = "unique_key_recheck"; const char *funcname = "unique_key_recheck";
ItemPointerData checktid; ItemPointerData checktid;
ItemPointerData tmptid; ItemPointerData tmptid;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment