From af388d9c8d878e2322d4fd0ce378e3d34fa84379 Mon Sep 17 00:00:00 2001 From: Paul Colby Date: Thu, 9 Apr 2015 07:36:02 +1000 Subject: [PATCH] Restore cout format flags after modification As reported by Coverity Scan (issue 89189), pcp::pmda::display_version was leaving the std::cout format flags altered. --- include/pcp-cpp/pmda.hpp | 4 ++++ test/unit/src/test_pmda.cpp | 11 +++++++++++ 2 files changed, 15 insertions(+) diff --git a/include/pcp-cpp/pmda.hpp b/include/pcp-cpp/pmda.hpp index 319881a..965bdbd 100644 --- a/include/pcp-cpp/pmda.hpp +++ b/include/pcp-cpp/pmda.hpp @@ -754,6 +754,8 @@ class pmda { */ virtual void display_version() const { + const std::ostream::fmtflags cout_format_flags(std::cout.flags()); + std::cout << std::endl << get_pmda_name() << " PMDA"; const std::string pmda_version = get_pmda_version(); if (!pmda_version.empty()) { @@ -765,6 +767,8 @@ class pmda { << get_pcp_runtime_version() << " (" << std::hex << get_pcp_runtime_version() << ')' << std::endl << std::endl; + + std::cout.flags(cout_format_flags); // Restore cout to its entry state. } /** diff --git a/test/unit/src/test_pmda.cpp b/test/unit/src/test_pmda.cpp index 9ad9a80..888836f 100644 --- a/test/unit/src/test_pmda.cpp +++ b/test/unit/src/test_pmda.cpp @@ -307,3 +307,14 @@ TEST(pmda, store_value_throws_by_default) { const pmValueBlock * const value = NULL; EXPECT_THROW(pmda.store_value(metric_id, value), pcp::exception); } + +TEST(pmda, display_functions_do_not_leave_cout_flags_modified) { + const std::ostream::fmtflags flags(std::cout.flags()); + const stub_pmda pmda; + + pmda.display_help(pmda.get_pmda_name()); + EXPECT_EQ(flags, std::cout.flags()); + + pmda.display_version(); + EXPECT_EQ(flags, std::cout.flags()); +}