From b289a3bb12c09fbfe7f8b5aed9039fd0ab05aa60 Mon Sep 17 00:00:00 2001 From: Remi Gacogne Date: Mon, 20 Nov 2023 12:10:31 +0100 Subject: [PATCH] misc: Prevent an unnecessary copy in cleanSlashes() reported by Coverity --- pdns/misc.cc | 22 +++++++++++++++------- pdns/test-misc_hh.cc | 16 ++++++++++++++++ 2 files changed, 31 insertions(+), 7 deletions(-) diff --git a/pdns/misc.cc b/pdns/misc.cc index b6ce141740..3e9fa6b68a 100644 --- a/pdns/misc.cc +++ b/pdns/misc.cc @@ -582,17 +582,25 @@ string bitFlip(const string &str) void cleanSlashes(string &str) { - string::const_iterator i; string out; - for(i=str.begin();i!=str.end();++i) { - if(*i=='/' && i!=str.begin() && *(i-1)=='/') - continue; - out.append(1,*i); + bool keepNextSlash = true; + for (const auto& value : str) { + if (value == '/') { + if (keepNextSlash) { + keepNextSlash = false; + } + else { + continue; + } + } + else { + keepNextSlash = true; + } + out.append(1, value); } - str=out; + str = std::move(out); } - bool IpToU32(const string &str, uint32_t *ip) { if(str.empty()) { diff --git a/pdns/test-misc_hh.cc b/pdns/test-misc_hh.cc index ec2f478f1f..6e5662b19e 100644 --- a/pdns/test-misc_hh.cc +++ b/pdns/test-misc_hh.cc @@ -397,4 +397,20 @@ BOOST_AUTO_TEST_CASE(test_makeHexDump) { BOOST_CHECK_EQUAL(out, "12 34 56 78 90 ab cd ef "); } +BOOST_AUTO_TEST_CASE(test_CleanSlashes) { + auto cleanSlashesWrapper = [](const char* str) { + std::string fullStr(str); + cleanSlashes(fullStr); + return fullStr; + }; + BOOST_CHECK_EQUAL(cleanSlashesWrapper("/test"), "/test"); + BOOST_CHECK_EQUAL(cleanSlashesWrapper("//test"), "/test"); + BOOST_CHECK_EQUAL(cleanSlashesWrapper("///test"), "/test"); + BOOST_CHECK_EQUAL(cleanSlashesWrapper("/test/"), "/test/"); + BOOST_CHECK_EQUAL(cleanSlashesWrapper("//test/"), "/test/"); + BOOST_CHECK_EQUAL(cleanSlashesWrapper("//test//"), "/test/"); + BOOST_CHECK_EQUAL(cleanSlashesWrapper("///test//"), "/test/"); + BOOST_CHECK_EQUAL(cleanSlashesWrapper("test///"), "test/"); +} + BOOST_AUTO_TEST_SUITE_END() -- 2.47.2