From: Tom Lane Date: Sat, 5 Jun 2004 17:42:50 +0000 (+0000) Subject: Adjust PageGetMaxOffsetNumber to ensure sane behavior on uninitialized X-Git-Url: http://waps.l3s.uni-hannover.de/gitweb/?a=commitdiff_plain;h=5d08bff034ecca6de33e6513b651a94f8eba56ff;p=users%2Fbernd%2Fpostgres.git Adjust PageGetMaxOffsetNumber to ensure sane behavior on uninitialized pages, even when the macro's result is stored into an unsigned variable. --- diff --git a/src/include/storage/bufpage.h b/src/include/storage/bufpage.h index 27d425aac9..4bb17743e3 100644 --- a/src/include/storage/bufpage.h +++ b/src/include/storage/bufpage.h @@ -283,13 +283,14 @@ typedef PageHeaderData *PageHeader; * Since offset numbers are 1-based, this is also the number * of items on the page. * - * NOTE: to ensure sane behavior if the page is not initialized - * (pd_lower == 0), cast the unsigned values to int before dividing. - * That way we get -1 or so, not a huge positive number... + * NOTE: if the page is not initialized (pd_lower == 0), we must + * return zero to ensure sane behavior. Accept double evaluation + * of the argument so that we can ensure this. */ #define PageGetMaxOffsetNumber(page) \ - (((int) (((PageHeader) (page))->pd_lower - SizeOfPageHeaderData)) \ - / ((int) sizeof(ItemIdData))) + (((PageHeader) (page))->pd_lower <= SizeOfPageHeaderData ? 0 : \ + ((((PageHeader) (page))->pd_lower - SizeOfPageHeaderData) \ + / sizeof(ItemIdData))) #define PageGetLSN(page) \ (((PageHeader) (page))->pd_lsn)