From 15fdb838c7361bad786098a05745edcd61c47de2 Mon Sep 17 00:00:00 2001
From: Arseny Kapoulkine <arseny.kapoulkine@gmail.com>
Date: Thu, 15 Mar 2018 22:56:28 -0700
Subject: [PATCH] ubsan: Fix type mismatch in compact mode for document data

We were misaligning document data on 64-bit platforms by placing 8b
pointers at 4b offsets; fix this by reserving a full pointer worth of
bytes for page marker.
---
 src/pugixml.cpp | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/pugixml.cpp b/src/pugixml.cpp
index 9e6fe487..94dca48b 100644
--- a/src/pugixml.cpp
+++ b/src/pugixml.cpp
@@ -6875,7 +6875,8 @@ namespace pugi
 		assert(!_root);
 
 	#ifdef PUGIXML_COMPACT
-		const size_t page_offset = sizeof(uint32_t);
+		// space for page marker for the first page (uint32_t), rounded up to pointer size; assumes pointers are at least 32-bit
+		const size_t page_offset = sizeof(void*);
 	#else
 		const size_t page_offset = 0;
 	#endif
-- 
GitLab