From: Brad Hubbard Date: Wed, 25 Nov 2020 01:57:37 +0000 (+1000) Subject: monmaptool: Don't call set_port on an invalid address X-Git-Tag: v14.2.22~25^2~15^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F40700%2Fhead;p=ceph.git monmaptool: Don't call set_port on an invalid address Verify we parse the entire address argument. Fixes: https://tracker.ceph.com/issues/48336 Signed-off-by: Brad Hubbard Signed-off-by: Kefu Chai (cherry picked from commit c0aa1fdbe7b87c2fb4b572169372ec487950b03d) --- diff --git a/src/msg/msg_types.cc b/src/msg/msg_types.cc index 76b9585b394e..e2e8cbb015bf 100644 --- a/src/msg/msg_types.cc +++ b/src/msg/msg_types.cc @@ -62,6 +62,14 @@ void entity_inst_t::generate_test_instances(list& o) o.push_back(a); } +bool entity_addr_t::parse(const std::string_view s) +{ + const char* start = s.data(); + const char* end = nullptr; + bool got = parse(start, &end); + return got && end == start + s.size(); +} + bool entity_addr_t::parse(const char *s, const char **end, int default_type) { *this = entity_addr_t(); diff --git a/src/msg/msg_types.h b/src/msg/msg_types.h index 74d5ee30f594..4fb7ec2acf7e 100644 --- a/src/msg/msg_types.h +++ b/src/msg/msg_types.h @@ -439,6 +439,7 @@ struct entity_addr_t { return ss.str(); } + bool parse(const std::string_view s); bool parse(const char *s, const char **end = 0, int type=0); void decode_legacy_addr_after_marker(bufferlist::const_iterator& bl) diff --git a/src/tools/monmaptool.cc b/src/tools/monmaptool.cc index ef819a3a5e28..1eeb4f5b584d 100644 --- a/src/tools/monmaptool.cc +++ b/src/tools/monmaptool.cc @@ -229,7 +229,8 @@ int main(int argc, const char **argv) if (i == args.end()) helpful_exit(); entity_addr_t addr; - if (!addr.parse(*i)) { + if (!addr.parse(string_view{*i})) { + // Either we couldn't parse the address or we didn't consume the entire token cerr << me << ": invalid ip:port '" << *i << "'" << std::endl; return -1; }