Fix assertion on dereferenced object
authorDaniel Gustafsson <[email protected]>
Fri, 14 Feb 2025 10:50:56 +0000 (11:50 +0100)
committerDaniel Gustafsson <[email protected]>
Fri, 14 Feb 2025 10:50:56 +0000 (11:50 +0100)
Commit 27cc7cd2bc8a accidentally placed the assertion ensuring
that the pointer isn't NULL after it had already been accessed.
Fix by moving the pointer dereferencing to after the assertion.
Backpatch to all supported branches.

Author: Dmitry Koval <[email protected]>
Reviewed-by: Daniel Gustafsson <[email protected]>
Reviewed-by: Michael Paquier <[email protected]>
Discussion: https://postgr.es/m/1618848d-cdc7-414b-9c03-08cf4bef4408@postgrespro.ru
Backpatch-through: 13

src/backend/executor/execMain.c

index 2e0eef7f3de36442bd139cac8ce549d4ebd40c2e..4ea51e4e992e7a72ba54a50bcfcef65d7e23a734 100644 (file)
@@ -2555,13 +2555,15 @@ bool
 EvalPlanQualFetchRowMark(EPQState *epqstate, Index rti, TupleTableSlot *slot)
 {
    ExecAuxRowMark *earm = epqstate->relsubs_rowmark[rti - 1];
-   ExecRowMark *erm = earm->rowmark;
+   ExecRowMark *erm;
    Datum       datum;
    bool        isNull;
 
    Assert(earm != NULL);
    Assert(epqstate->origslot != NULL);
 
+   erm = earm->rowmark;
+
    if (RowMarkRequiresRowShareLock(erm->markType))
        elog(ERROR, "EvalPlanQual doesn't support locking rowmarks");