From 302ac7f27197855afa8c89fae36c85c124ae156b Mon Sep 17 00:00:00 2001
From: Heikki Linnakangas <heikki.linnakangas@iki.fi>
Date: Tue, 30 Jun 2015 13:44:04 +0300
Subject: [PATCH] Add assertion to check the special size is sane before
 dereferencing it.

This seems useful to catch errors of the sort I just fixed, where
PageGetSpecialPointer is called before initializing the page.
---
 src/include/storage/bufpage.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/src/include/storage/bufpage.h b/src/include/storage/bufpage.h
index c2fbffc8e9b..a2f78ee56ce 100644
--- a/src/include/storage/bufpage.h
+++ b/src/include/storage/bufpage.h
@@ -304,6 +304,8 @@ typedef PageHeaderData *PageHeader;
 #define PageGetSpecialPointer(page) \
 ( \
 	AssertMacro(PageIsValid(page)), \
+	AssertMacro(((PageHeader) (page))->pd_special <= BLCKSZ), \
+	AssertMacro(((PageHeader) (page))->pd_special >= SizeOfPageHeaderData), \
 	(char *) ((char *) (page) + ((PageHeader) (page))->pd_special) \
 )
 
-- 
GitLab