diff --git a/src/network_engine.cpp b/src/network_engine.cpp index 6326ba88e67547bb47285aef4b2e2a9844e87a2b..59c9355416497428a8c903686929e094cd322404 100644 --- a/src/network_engine.cpp +++ b/src/network_engine.cpp @@ -1329,14 +1329,15 @@ ParsedMessage::msgpack_unpack(msgpack::object msg) } } else if (auto raw_fields = findMapValue(req, "fields")) { if (auto rfields = findMapValue(*raw_fields, "f")) { - auto fields_ = rfields->as<std::set<Value::Field>>(); + auto vfields = rfields->as<std::set<Value::Field>>(); if (auto rvalues = findMapValue(*raw_fields, "v")) { if (rvalues->type != msgpack::type::ARRAY) throw msgpack::type_error(); - for (size_t i = 0; i < rvalues->via.array.size; ++i) { + size_t val_num = rvalues->via.array.size / vfields.size(); + for (size_t i = 0; i < val_num; ++i) { try { auto v = std::make_shared<FieldValueIndex>(); - v->msgpack_unpack_fields(fields_, *rvalues, i*fields_.size()); + v->msgpack_unpack_fields(vfields, *rvalues, i*vfields.size()); fields.emplace_back(std::move(v)); } catch (const std::exception& e) { } }