From: Remi Gacogne Date: Fri, 30 Jun 2023 16:16:03 +0000 (+0200) Subject: dnsdist: Fix "Pointer to local outside storage" reported by Coverity X-Git-Tag: rec-5.0.0-alpha1~121^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F12974%2Fhead;p=thirdparty%2Fpdns.git dnsdist: Fix "Pointer to local outside storage" reported by Coverity We use a temporary `std::string` for a very short tile after it is no longer required to exist when adding a new custom metric. Reported by Coverity as CID 394511. --- diff --git a/pdns/dnsdistdist/dnsdist-metrics.cc b/pdns/dnsdistdist/dnsdist-metrics.cc index e86439c89e..268778aef2 100644 --- a/pdns/dnsdistdist/dnsdist-metrics.cc +++ b/pdns/dnsdistdist/dnsdist-metrics.cc @@ -160,12 +160,13 @@ std::optional declareCustomMetric(const std::string& name, const st return std::string("Unable to declare metric '") + std::string(name) + std::string("': invalid name\n"); } + const std::string finalCustomName(customName ? *customName : ""); if (type == "counter") { auto customCounters = s_customCounters.write_lock(); auto itp = customCounters->insert({name, MutableCounter()}); if (itp.second) { g_stats.entries.write_lock()->emplace_back(Stats::EntryPair{name, &(*customCounters)[name].d_value}); - dnsdist::prometheus::PrometheusMetricDefinition def{name, "counter", description, customName ? *customName : ""}; + dnsdist::prometheus::PrometheusMetricDefinition def{name, type, description, finalCustomName}; addMetricDefinition(def); } } @@ -174,7 +175,7 @@ std::optional declareCustomMetric(const std::string& name, const st auto itp = customGauges->insert({name, MutableGauge()}); if (itp.second) { g_stats.entries.write_lock()->emplace_back(Stats::EntryPair{name, &(*customGauges)[name].d_value}); - dnsdist::prometheus::PrometheusMetricDefinition def{name, "gauge", description, customName ? *customName : ""}; + dnsdist::prometheus::PrometheusMetricDefinition def{name, type, description, finalCustomName}; addMetricDefinition(def); } }