From 6703e039b16d53360bf299f03104547538dc80b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Wed, 26 Oct 2016 17:33:22 -0400 Subject: [PATCH] network_engine: deserialize proper number of fields --- src/network_engine.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/network_engine.cpp b/src/network_engine.cpp index 6326ba88..59c93554 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) { } } -- GitLab