Merge branch 'added_vector_bool_size_check' of https://github.com/redboltz/msgpack-c into redboltz-added_vector_bool_size_check

# Conflicts:
#	include/msgpack/adaptor/vector_bool.hpp
This commit is contained in:
Takatoshi Kondo 2015-04-03 14:28:00 +09:00
commit ed91c18af8

View File

@ -50,7 +50,8 @@ template <>
struct pack<std::vector<bool> > { struct pack<std::vector<bool> > {
template <typename Stream> template <typename Stream>
msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::vector<bool>& v) const { msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const std::vector<bool>& v) const {
o.pack_array(v.size()); uint32_t size = checked_get_container_size(v.size());
o.pack_array(size);
for(std::vector<bool>::const_iterator it(v.begin()), it_end(v.end()); for(std::vector<bool>::const_iterator it(v.begin()), it_end(v.end());
it != it_end; ++it) { it != it_end; ++it) {
o.pack(static_cast<bool>(*it)); o.pack(static_cast<bool>(*it));
@ -67,10 +68,11 @@ struct object_with_zone<std::vector<bool> > {
o.via.array.ptr = nullptr; o.via.array.ptr = nullptr;
o.via.array.size = 0; o.via.array.size = 0;
} else { } else {
msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*v.size())); uint32_t size = checked_get_container_size(v.size());
msgpack::object* const pend = p + v.size(); msgpack::object* p = static_cast<msgpack::object*>(o.zone.allocate_align(sizeof(msgpack::object)*size));
msgpack::object* const pend = p + size;
o.via.array.ptr = p; o.via.array.ptr = p;
o.via.array.size = v.size(); o.via.array.size = size;
std::vector<bool>::const_iterator it(v.begin()); std::vector<bool>::const_iterator it(v.begin());
do { do {
*p = msgpack::object(static_cast<bool>(*it), o.zone); *p = msgpack::object(static_cast<bool>(*it), o.zone);