From 78b067566f80fb78918fb01da314a3aef3c8d04e Mon Sep 17 00:00:00 2001 From: Vitaliy Filippov Date: Sat, 20 Jun 2026 01:54:49 +0300 Subject: [PATCH] Do not use std::stoull as it may throw --- src/client/etcd_state_client.cpp | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/client/etcd_state_client.cpp b/src/client/etcd_state_client.cpp index 451c03c4..f7090f10 100644 --- a/src/client/etcd_state_client.cpp +++ b/src/client/etcd_state_client.cpp @@ -757,8 +757,14 @@ void etcd_state_client_t::parse_state(const etcd_kv_t & kv) else if (key.substr(0, etcd_prefix.length()+11) == etcd_prefix+"/osd/state/") { // /osd/state/%d - osd_num_t peer_osd = std::stoull(key.substr(etcd_prefix.length()+11)); - if (peer_osd > 0) + osd_num_t peer_osd = 0; + char null_byte = 0; + int scanned = sscanf(key.c_str() + etcd_prefix.length()+11, "%ju%c", &peer_osd, &null_byte); + if (scanned != 1 || !peer_osd) + { + fprintf(stderr, "Bad etcd key %s, ignoring\n", key.c_str()); + } + else { if (value.is_object() && value["state"] == "up") {