On 02/03/2016 05:59 PM, Richard Shaw wrote:
In member function 'void OpenImageIO::v1_6::pugi::xml_document::create()': /builddir/build/BUILD/oiio-Release-1.6.9/src/include/OpenImageIO/pugixml.cpp:5143:58: error: placement new constructing an object of type 'OpenImageIO::v1_6::pugi::impl::xml_document_struct' and size '44' in a region of type 'char [1]' and size '1' [-Werror=placement-new] _root = new (page->data) impl::xml_document_struct(page);
It's the use of char data[1] as a flexible array member. I'm not sure if this is valid C++. Warning about it is certainly appropriate.
You should remove the data member, use sizeof(xml_memory_page) instead of offsetof(xml_memory_page, data), and replace page->data with reinterpret_cast<char *>(page) + sizeof (impl::xml_memory_page), or ideally, have xml_memory_page::construct() return both pointers.
You probably should check for wraparound in the size computations as well, to avoid allocating less memory than requested.
Florian