mirror of
https://github.com/postgres/postgres.git
synced 2025-11-09 06:21:09 +03:00
Add more sanity-checking to PageAddItem and PageIndexTupleDelete,
to prevent spreading of corruption when page header pointers are bad. Merge PageZero into PageInit, since it was never used separately, and remove separate memset calls used at most other PageInit call points. Remove IndexPageCleanup, which wasn't used at all.
This commit is contained in:
@@ -8,7 +8,7 @@
|
||||
* Portions Copyright (c) 1994, Regents of the University of California
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/gist/gist.c,v 1.86 2001/11/05 17:46:23 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/gist/gist.c,v 1.87 2002/01/15 22:14:16 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -1437,7 +1437,7 @@ GISTInitBuffer(Buffer b, uint32 f)
|
||||
pageSize = BufferGetPageSize(b);
|
||||
|
||||
page = BufferGetPage(b);
|
||||
MemSet(page, 0, (int) pageSize);
|
||||
|
||||
PageInit(page, pageSize, sizeof(GISTPageOpaqueData));
|
||||
|
||||
opaque = (GISTPageOpaque) PageGetSpecialPointer(page);
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/hash/hashpage.c,v 1.33 2001/10/25 05:49:21 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/hash/hashpage.c,v 1.34 2002/01/15 22:14:16 tgl Exp $
|
||||
*
|
||||
* NOTES
|
||||
* Postgres hash pages look like ordinary relation pages. The opaque
|
||||
@@ -301,17 +301,7 @@ _hash_chgbufaccess(Relation rel,
|
||||
void
|
||||
_hash_pageinit(Page page, Size size)
|
||||
{
|
||||
Assert(((PageHeader) page)->pd_lower == 0);
|
||||
Assert(((PageHeader) page)->pd_upper == 0);
|
||||
Assert(((PageHeader) page)->pd_special == 0);
|
||||
|
||||
/*
|
||||
* Cargo-cult programming -- don't really need this to be zero, but
|
||||
* creating new pages is an infrequent occurrence and it makes me feel
|
||||
* good when I know they're empty.
|
||||
*/
|
||||
MemSet(page, 0, size);
|
||||
|
||||
Assert(PageIsNew(page));
|
||||
PageInit(page, size, sizeof(HashPageOpaqueData));
|
||||
}
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.128 2001/11/05 17:46:23 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/heap/heapam.c,v 1.129 2002/01/15 22:14:17 tgl Exp $
|
||||
*
|
||||
*
|
||||
* INTERFACE ROUTINES
|
||||
@@ -2094,10 +2094,7 @@ heap_xlog_insert(bool redo, XLogRecPtr lsn, XLogRecord *record)
|
||||
uint32 newlen;
|
||||
|
||||
if (record->xl_info & XLOG_HEAP_INIT_PAGE)
|
||||
{
|
||||
PageInit(page, BufferGetPageSize(buffer), 0);
|
||||
PageZero(page);
|
||||
}
|
||||
|
||||
if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */
|
||||
{
|
||||
@@ -2262,10 +2259,7 @@ newsame:;
|
||||
uint32 newlen;
|
||||
|
||||
if (record->xl_info & XLOG_HEAP_INIT_PAGE)
|
||||
{
|
||||
PageInit(page, BufferGetPageSize(buffer), 0);
|
||||
PageZero(page);
|
||||
}
|
||||
|
||||
if (XLByteLE(lsn, PageGetLSN(page))) /* changes are applied */
|
||||
{
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtpage.c,v 1.54 2001/10/25 05:49:21 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/nbtree/nbtpage.c,v 1.55 2002/01/15 22:14:17 tgl Exp $
|
||||
*
|
||||
* NOTES
|
||||
* Postgres btree pages look like ordinary relation pages. The opaque
|
||||
@@ -399,14 +399,6 @@ _bt_wrtnorelbuf(Relation rel, Buffer buf)
|
||||
void
|
||||
_bt_pageinit(Page page, Size size)
|
||||
{
|
||||
/*
|
||||
* Cargo_cult programming -- don't really need this to be zero, but
|
||||
* creating new pages is an infrequent occurrence and it makes me feel
|
||||
* good when I know they're empty.
|
||||
*/
|
||||
|
||||
MemSet(page, 0, size);
|
||||
|
||||
PageInit(page, size, sizeof(BTPageOpaqueData));
|
||||
((BTPageOpaque) PageGetSpecialPointer(page))->btpo_parent =
|
||||
InvalidBlockNumber;
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.68 2001/11/05 17:46:24 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/access/rtree/Attic/rtree.c,v 1.69 2002/01/15 22:14:17 tgl Exp $
|
||||
*
|
||||
*-------------------------------------------------------------------------
|
||||
*/
|
||||
@@ -1107,7 +1107,7 @@ RTInitBuffer(Buffer b, uint32 f)
|
||||
pageSize = BufferGetPageSize(b);
|
||||
|
||||
page = BufferGetPage(b);
|
||||
MemSet(page, 0, (int) pageSize);
|
||||
|
||||
PageInit(page, pageSize, sizeof(RTreePageOpaqueData));
|
||||
|
||||
opaque = (RTreePageOpaque) PageGetSpecialPointer(page);
|
||||
|
||||
Reference in New Issue
Block a user