mirror of
https://git.postgresql.org/git/postgresql.git
synced 2024-08-26 20:57:20 +02:00
Fix unsafe coding around PG_TRY in RelationBuildRowSecurity: can't change a variable inside PG_TRY and then use it in PG_CATCH without marking it "volatile". In this case though it seems saner to avoid that by doing a single assignment before entering the TRY block. I started out just intending to fix that, but the more I looked at the row-security code the more distressed I got. This patch also fixes incorrect construction of the RowSecurityPolicy cache entries (there was not sufficient care taken to copy pass-by-ref data into the cache memory context) and a whole bunch of sloppiness around the definition and use of pg_policy.polcmd. You can't use nulls in that column because initdb will mark it NOT NULL --- and I see no particular reason why a null entry would be a good idea anyway, so changing initdb's behavior is not the right answer. The internal value of '\0' wouldn't be suitable in a "char" column either, so after a bit of thought I settled on using '*' to represent ALL. Chasing those changes down also revealed that somebody wasn't paying attention to what the underlying values of ACL_UPDATE_CHR etc really were, and there was a great deal of lackadaiscalness in the catalogs.sgml documentation for pg_policy and pg_policies too. This doesn't pretend to be a complete code review for the row-security stuff, it just fixes the things that were in my face while dealing with the bugs in RelationBuildRowSecurity. |
||
---|---|---|
.. | ||
po | ||
.gitignore | ||
common.c | ||
compress_io.c | ||
compress_io.h | ||
dumputils.c | ||
dumputils.h | ||
keywords.c | ||
Makefile | ||
nls.mk | ||
parallel.c | ||
parallel.h | ||
pg_backup_archiver.c | ||
pg_backup_archiver.h | ||
pg_backup_custom.c | ||
pg_backup_db.c | ||
pg_backup_db.h | ||
pg_backup_directory.c | ||
pg_backup_null.c | ||
pg_backup_tar.c | ||
pg_backup_tar.h | ||
pg_backup_utils.c | ||
pg_backup_utils.h | ||
pg_backup.h | ||
pg_dump_sort.c | ||
pg_dump.c | ||
pg_dump.h | ||
pg_dumpall.c | ||
pg_restore.c |