Tencent / rapidjson

A fast JSON parser/generator for C++ with both SAX/DOM style API
http://rapidjson.org/
Other
14.14k stars 3.52k forks source link

AddMember causing segmentation fault #2157

Open mkandulavm opened 1 year ago

mkandulavm commented 1 year ago

Hi

I am using latest (1.1.0) on a debian linux machine with x86_64 arch. After doing parsing of a string

rapidjson::Document document;
document.Parse(request.c_str());

calling AddMember like this

auto &allocator = document.getAllocator();
document.AddMember({"key", allocator}, {opt.language(), allocator}, allocator);

is causing segmentation fault. Here is the call stack.


rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator>::Realloc(rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> * const this, void * originalPtr, std::size_t originalSize, std::size_t newSize) (/home/mkandula/extProjects/valhalla/third_party/rapidjson/include/rapidjson/allocators.h:341)
rapidjson::Realloc<rapidjson::GenericMember<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> >, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> >(rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> & a, rapidjson::GenericMember<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> > * old_p, std::size_t old_n, std::size_t new_n) (/home/mkandula/extProjects/valhalla/third_party/rapidjson/include/rapidjson/allocators.h:438)
rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> >::DoReserveMembers(rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> > * const this, rapidjson::SizeType newCapacity, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> & allocator) (/home/mkandula/extProjects/valhalla/third_party/rapidjson/include/rapidjson/document.h:2275)
rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> >::DoAddMember(rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> > * const this, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> > & name, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> > & value, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> & allocator) (/home/mkandula/extProjects/valhalla/third_party/rapidjson/include/rapidjson/document.h:2307)
rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> >::AddMember(rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> > * const this, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> > & name, rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> > & value, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> & allocator) (/home/mkandula/extProjects/valhalla/third_party/rapidjson/include/rapidjson/document.h:1390)
rapidjson::GenericValue<rapidjson::UTF8<char>, rapidjson::MemoryPoolAllocator<rapidjson::CrtAllocator> 

I believe this is something got to do with enabling some compiler flag.

Kindly help.

mans5647 commented 12 months ago

AddMember("member-name", obj, Document::allocator()). The 'obj' must be type of 'Value' and contain data you passed by functions SetString(), SetFloat() or etc ...