summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorArseny Kapoulkine <arseny.kapoulkine@gmail.com>2015-06-12 23:55:34 -0700
committerArseny Kapoulkine <arseny.kapoulkine@gmail.com>2015-06-12 23:59:35 -0700
commitd04df2a48ba81725b704d92810277c5eb0206db4 (patch)
treef571dbe397f55605cfd678654d6c75692c648d48 /src
parent97afc16ef26ff5c830e01009e013f794d5f1a1d2 (diff)
Fix Clang 3.7 compatibility
Apparently Clang 3.7 implements C++ DR 1748 that makes placement new with null pointer undefined behavior. Which renders all C++ programs that rely on this invalid. Which includes pugixml. This is not very likely to happen in the wild because the allocations that are subject to this in pugixml are relatively small, but tests break because of this. Fix the issue by adding null pointer checks (that are completely redundant in all current compilers except Clang 3.7 but it's not like there is another option).
Diffstat (limited to 'src')
-rw-r--r--src/pugixml.cpp4
1 files changed, 4 insertions, 0 deletions
diff --git a/src/pugixml.cpp b/src/pugixml.cpp
index 15dcd01..0d762a7 100644
--- a/src/pugixml.cpp
+++ b/src/pugixml.cpp
@@ -1157,6 +1157,7 @@ PUGI__NS_BEGIN
{
xml_memory_page* page;
void* memory = alloc.allocate_object(sizeof(xml_attribute_struct), page);
+ if (!memory) return 0;
return new (memory) xml_attribute_struct(page);
}
@@ -1165,6 +1166,7 @@ PUGI__NS_BEGIN
{
xml_memory_page* page;
void* memory = alloc.allocate_object(sizeof(xml_node_struct), page);
+ if (!memory) return 0;
return new (memory) xml_node_struct(page, type);
}
@@ -4714,6 +4716,7 @@ PUGI__NS_BEGIN
static xml_stream_chunk* create()
{
void* memory = xml_memory::allocate(sizeof(xml_stream_chunk));
+ if (!memory) return 0;
return new (memory) xml_stream_chunk();
}
@@ -11606,6 +11609,7 @@ PUGI__NS_BEGIN
static xpath_query_impl* create()
{
void* memory = xml_memory::allocate(sizeof(xpath_query_impl));
+ if (!memory) return 0;
return new (memory) xpath_query_impl();
}