Re: restoring user id and SecContext before logging error in ri_PlanCheck - Mailing list pgsql-hackers

From Noah Misch
Subject Re: restoring user id and SecContext before logging error in ri_PlanCheck
Date
Msg-id 20221205005629.GA420344@rfd.leadboat.com
Whole thread Raw
In response to Re: restoring user id and SecContext before logging error in ri_PlanCheck  (Zhihong Yu <zyu@yugabyte.com>)
List pgsql-hackers
On Wed, Nov 02, 2022 at 08:00:58AM -0700, Zhihong Yu wrote:
> Looking down in ri_PerformCheck(), I see there may be case where error from
> SPI_execute_snapshot() would skip restoring UID.

> @@ -2405,13 +2405,19 @@ ri_PerformCheck(const RI_ConstraintInfo *riinfo,
>                             SECURITY_NOFORCE_RLS);
>  
>      /* Finally we can run the query. */
> -    spi_result = SPI_execute_snapshot(qplan,
> -                                      vals, nulls,
> -                                      test_snapshot, crosscheck_snapshot,
> -                                      false, false, limit);
> -
> -    /* Restore UID and security context */
> -    SetUserIdAndSecContext(save_userid, save_sec_context);
> +    PG_TRY();
> +    {
> +        spi_result = SPI_execute_snapshot(qplan,
> +                                          vals, nulls,
> +                                          test_snapshot, crosscheck_snapshot,
> +                                          false, false, limit);
> +    }
> +    PG_FINALLY();
> +    {
> +        /* Restore UID and security context */
> +        SetUserIdAndSecContext(save_userid, save_sec_context);
> +    }
> +    PG_END_TRY();

After an error, AbortSubTransaction() or AbortTransaction() will restore
userid and sec_context.  That makes such changes unnecessary.



pgsql-hackers by date:

Previous
From: David Rowley
Date:
Subject: Re: Improve performance of pg_strtointNN functions
Next
From: Michael Paquier
Date:
Subject: Re: Add LSN along with offset to error messages reported for WAL file read/write/validate header failures