summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArseny Kapoulkine <arseny.kapoulkine@gmail.com>2014-11-06 09:33:05 +0100
committerArseny Kapoulkine <arseny.kapoulkine@gmail.com>2014-11-06 09:33:05 +0100
commit56349939e423c29c5bda99e0f2d070d46ffce6d6 (patch)
treed3cd100359aaacd11c8e4ca0d3200856f9dbf1b1
parent224b9b7ba76311b6a5ab8efec97c16180f721843 (diff)
Verify that compact page encoding is safe
Since page size can be customized let's do a special validation check for compact encoding. Right now it's redundant since page size is limited by 64k in alloc_string, but that may change in the future.
-rw-r--r--src/pugixml.cpp2
1 files changed, 2 insertions, 0 deletions
diff --git a/src/pugixml.cpp b/src/pugixml.cpp
index ef9400f..e5fd4b2 100644
--- a/src/pugixml.cpp
+++ b/src/pugixml.cpp
@@ -667,6 +667,8 @@ PUGI__NS_BEGIN
public:
compact_header(xml_memory_page* page, unsigned int flags)
{
+ PUGI__STATIC_ASSERT(sizeof(xml_memory_page) + xml_memory_page_size <= (1 << (16 + compact_alignment_log2)));
+
ptrdiff_t page_offset = (reinterpret_cast<char*>(this) - reinterpret_cast<char*>(page)) >> compact_alignment_log2;
assert(page_offset >= 0 && page_offset < (1 << 16));