From 4bcb6039bcfa0e5b2761dce1dfcbd2d94688e419 Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Fri, 30 Jun 2023 18:16:03 +0200 Subject: [PATCH] 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. --- pdns/dnsdistdist/dnsdist-metrics.cc | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) 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); } } -- 2.47.2