Guard against null plan pointer in CachedPlanIsSimplyValid().
authorTom Lane <tgl@sss.pgh.pa.us>
Thu, 20 Jul 2023 18:23:46 +0000 (14:23 -0400)
committerTom Lane <tgl@sss.pgh.pa.us>
Thu, 20 Jul 2023 18:23:46 +0000 (14:23 -0400)
commitfbaf65cd65f4f0810dab9f2b3e840e68d8b959eb
treeb632e30519c7734ec2405349f41aaabfab8b4687
parentbc9993a5497748ca333beac34a8446114bfacce7
Guard against null plan pointer in CachedPlanIsSimplyValid().

If both the passed-in plan pointer and plansource->gplan are
NULL, CachedPlanIsSimplyValid would think that the plan pointer
is possibly-valid and try to dereference it.  For the one extant
call site in plpgsql, this situation doesn't normally happen
which is why we've not noticed. However, it appears to be possible
if the previous use of the cached plan failed, as per report from
Justin Pryzby.  Add an extra check to prevent crashing.
Back-patch to v13 where this code was added.

Discussion: https://postgr.es/m/ZLlV+STFz1l/WhAQ@telsasoft.com
src/backend/utils/cache/plancache.c