diff options
author | Tom Lane | 2009-03-31 22:54:31 +0000 |
---|---|---|
committer | Tom Lane | 2009-03-31 22:54:31 +0000 |
commit | c029a6a49e3782ec5f1a61eb9a495ebd2a56077d (patch) | |
tree | fb92a2d210a1086b1fe7c4b83123c1f729ea57ec /contrib/pgstattuple/pgstatindex.c | |
parent | 572b60a3bd2af3c3ef75216cf6378025d7d317b1 (diff) |
Fix contrib/pgstattuple and contrib/pageinspect to prevent attempts to read
temporary tables of other sessions; that is unsafe because of the way our
buffer management works. Per report from Stuart Bishop.
This is redundant with the bufmgr.c checks in HEAD, but not at all redundant
in the back branches.
Diffstat (limited to 'contrib/pgstattuple/pgstatindex.c')
-rw-r--r-- | contrib/pgstattuple/pgstatindex.c | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/contrib/pgstattuple/pgstatindex.c b/contrib/pgstattuple/pgstatindex.c index dfb162d5e45..b00ae5b766b 100644 --- a/contrib/pgstattuple/pgstatindex.c +++ b/contrib/pgstattuple/pgstatindex.c @@ -1,5 +1,5 @@ /* - * $PostgreSQL: pgsql/contrib/pgstattuple/pgstatindex.c,v 1.11 2008/05/17 01:28:22 adunstan Exp $ + * $PostgreSQL: pgsql/contrib/pgstattuple/pgstatindex.c,v 1.12 2009/03/31 22:54:31 tgl Exp $ * * * pgstatindex @@ -108,6 +108,16 @@ pgstatindex(PG_FUNCTION_ARGS) RelationGetRelationName(rel)); /* + * Reject attempts to read non-local temporary relations; we would + * be likely to get wrong data since we have no visibility into the + * owning session's local buffers. + */ + if (RELATION_IS_OTHER_TEMP(rel)) + ereport(ERROR, + (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), + errmsg("cannot access temporary tables of other sessions"))); + + /* * Read metapage */ { @@ -262,6 +272,8 @@ pg_relpages(PG_FUNCTION_ARGS) relrv = makeRangeVarFromNameList(textToQualifiedNameList(relname)); rel = relation_openrv(relrv, AccessShareLock); + /* note: this will work OK on non-local temp tables */ + relpages = RelationGetNumberOfBlocks(rel); relation_close(rel, AccessShareLock); |