From 4587c0925f6fd271853e129ff532e30cd3a8d50a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com> Date: Wed, 13 May 2020 16:11:31 -0400 Subject: [PATCH] utils: always check length in findMapValue --- include/opendht/utils.h | 10 ++++++++-- src/utils.cpp | 16 ++-------------- 2 files changed, 10 insertions(+), 16 deletions(-) diff --git a/include/opendht/utils.h b/include/opendht/utils.h index 4836fd65..93b6e8d9 100644 --- a/include/opendht/utils.h +++ b/include/opendht/utils.h @@ -173,7 +173,13 @@ unpackMsg(Blob b) { msgpack::unpacked unpackMsg(Blob b); -msgpack::object* findMapValue(const msgpack::object& map, const char* key); -msgpack::object* findMapValue(const msgpack::object& map, const std::string& key); +msgpack::object* findMapValue(const msgpack::object& map, const char* key, size_t length); + +inline msgpack::object* findMapValue(const msgpack::object& map, const char* key) { + return findMapValue(map, key, strlen(key)); +} +inline msgpack::object* findMapValue(const msgpack::object& map, const std::string& key) { + return findMapValue(map, key.c_str(), key.size()); +} } // namespace dht diff --git a/src/utils.cpp b/src/utils.cpp index 90efca77..be69eac0 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -277,28 +277,16 @@ unpackMsg(Blob b) { } msgpack::object* -findMapValue(const msgpack::object& map, const char* key) { +findMapValue(const msgpack::object& map, const char* key, size_t key_length) { if (map.type != msgpack::type::MAP) throw msgpack::type_error(); for (unsigned i = 0; i < map.via.map.size; i++) { auto& o = map.via.map.ptr[i]; if (o.key.type == msgpack::type::STR + && key_length == o.key.via.str.size && std::strncmp(o.key.via.str.ptr, key, o.key.via.str.size) == 0) return &o.val; } return nullptr; } -msgpack::object* -findMapValue(const msgpack::object& map, const std::string& key) { - if (map.type != msgpack::type::MAP) throw msgpack::type_error(); - for (unsigned i = 0; i < map.via.map.size; i++) { - auto& o = map.via.map.ptr[i]; - if (o.key.type == msgpack::type::STR - && key.size() == o.key.via.str.size - && std::strncmp(o.key.via.str.ptr, key.data(), o.key.via.str.size) == 0) - return &o.val; - } - return nullptr; -} - } -- GitLab