diff options
author | Arseny Kapoulkine <arseny.kapoulkine@gmail.com> | 2015-06-12 23:55:34 -0700 |
---|---|---|
committer | Arseny Kapoulkine <arseny.kapoulkine@gmail.com> | 2015-06-12 23:59:35 -0700 |
commit | d04df2a48ba81725b704d92810277c5eb0206db4 (patch) | |
tree | f571dbe397f55605cfd678654d6c75692c648d48 /src/pugixml.cpp | |
parent | 97afc16ef26ff5c830e01009e013f794d5f1a1d2 (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/pugixml.cpp')
-rw-r--r-- | src/pugixml.cpp | 4 |
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(); } |