diff --git a/src/operators/fuzzy_hash.cc b/src/operators/fuzzy_hash.cc index 61ea2821e5..46ed5eb9de 100644 --- a/src/operators/fuzzy_hash.cc +++ b/src/operators/fuzzy_hash.cc @@ -27,7 +27,7 @@ bool FuzzyHash::init(const std::string ¶m2, std::string *error) { #ifdef WITH_SSDEEP std::string digit; std::string file; - std::istream *iss; + std::ifstream *iss; std::shared_ptr chunk, t; std::string err; @@ -48,7 +48,7 @@ bool FuzzyHash::init(const std::string ¶m2, std::string *error) { std::string resource = utils::find_resource(file, param2, &err); iss = new std::ifstream(resource, std::ios::in); - if (((std::ifstream *)iss)->is_open() == false) { + if (iss->is_open() == false) { error->assign("Failed to open file: " + m_param + ". " + err); delete iss; return false; diff --git a/src/operators/inspect_file.cc b/src/operators/inspect_file.cc index 3796d26e62..28c9c072ad 100644 --- a/src/operators/inspect_file.cc +++ b/src/operators/inspect_file.cc @@ -31,14 +31,14 @@ namespace modsecurity { namespace operators { bool InspectFile::init(const std::string ¶m2, std::string *error) { - std::istream *iss; + std::ifstream *iss; std::string err; std::string err_lua; m_file = utils::find_resource(m_param, param2, &err); iss = new std::ifstream(m_file, std::ios::in); - if (((std::ifstream *)iss)->is_open() == false) { + if (iss->is_open() == false) { error->assign("Failed to open file: " + m_param + ". " + err); delete iss; return false; diff --git a/src/operators/pm_from_file.cc b/src/operators/pm_from_file.cc index 8016c9cb5f..52651e95cc 100644 --- a/src/operators/pm_from_file.cc +++ b/src/operators/pm_from_file.cc @@ -49,37 +49,34 @@ bool PmFromFile::init(const std::string &config, std::string *error) { std::vector tokens = split(m_param, ' '); for (const auto& token : tokens) { - if (! token.empty()) { - - std::istream *iss; + if (token.empty()) { + continue; + } - if (token.compare(0, 8, "https://") == 0) { - Utils::HttpsClient client; - bool ret = client.download(token); - if (ret == false) { - error->assign(client.error); - return false; - } - iss = new std::stringstream(client.content); - } else { - std::string err; - std::string resource = utils::find_resource(token, config, &err); - iss = new std::ifstream(resource, std::ios::in); + std::unique_ptr iss; - if (((std::ifstream *)iss)->is_open() == false) { - error->assign("Failed to open file: '" + token + "'. " + err); - delete iss; - return false; - } + if (token.compare(0, 8, "https://") == 0) { + Utils::HttpsClient client; + bool ret = client.download(token); + if (ret == false) { + error->assign(client.error); + return false; } - - for (std::string line; std::getline(*iss, line); ) { - if (isComment(line) == false) { - acmp_add_pattern(m_p, line.c_str(), NULL, NULL, line.length()); - } + iss = std::make_unique(client.content); + } else { + std::string err; + std::string resource = utils::find_resource(token, config, &err); + auto file = std::make_unique(resource, std::ios::in); + if (file->is_open() == false) { + error->assign("Failed to open file: '" + token + "'. " + err); + return false; + } + iss = std::move(file); + } + for (std::string line; std::getline(*iss, line); ) { + if (isComment(line) == false) { + acmp_add_pattern(m_p, line.c_str(), NULL, NULL, line.length()); } - - delete iss; } } diff --git a/src/operators/rbl.cc b/src/operators/rbl.cc index 4b06f337ae..9190407b96 100644 --- a/src/operators/rbl.cc +++ b/src/operators/rbl.cc @@ -226,9 +226,20 @@ bool Rbl::evaluate(Transaction *t, RuleWithActions *rule, return false; } - struct sockaddr *addr = info->ai_addr; - struct sockaddr_in *sin = (struct sockaddr_in *) addr; - furtherInfo(sin, ipStr, t, m_provider); + // SonarCloud suggested to use the init-statement to declare "addr" inside the if statement. + // I think that's not good here, because we need that in the else block + const struct sockaddr *addr = info->ai_addr; // NOSONAR + if (addr->sa_family == AF_INET) { // NOSONAR + struct sockaddr_in sin{}; // initialize an empty struct; we don't need port info + memcpy(&sin.sin_addr, addr->sa_data + 2, sizeof(sin.sin_addr)); + sin.sin_family = AF_INET; + furtherInfo(&sin, ipStr, t, m_provider); + } + else { + ms_dbg_a(t, 7, "Unsupported address family: " + std::to_string(addr->sa_family)); + freeaddrinfo(info); + return false; + } freeaddrinfo(info); if (rule && t && rule->hasCaptureAction()) { diff --git a/src/operators/validate_dtd.cc b/src/operators/validate_dtd.cc index 138c707801..30423bd6fe 100644 --- a/src/operators/validate_dtd.cc +++ b/src/operators/validate_dtd.cc @@ -45,7 +45,7 @@ bool ValidateDTD::init(const std::string &file, std::string *error) { bool ValidateDTD::evaluate(Transaction *transaction, const std::string &str) { - XmlDtdPtrManager dtd(xmlParseDTD(NULL, (const xmlChar *)m_resource.c_str())); + XmlDtdPtrManager dtd(xmlParseDTD(NULL, reinterpret_cast(m_resource.c_str()))); if (dtd.get() == NULL) { std::string err = std::string("XML: Failed to load DTD: ") \ + m_resource; diff --git a/src/variables/xml.cc b/src/variables/xml.cc index 03dbc96732..0a2d33a0dd 100644 --- a/src/variables/xml.cc +++ b/src/variables/xml.cc @@ -79,7 +79,7 @@ void XML::evaluate(Transaction *t, } /* Process the XPath expression. */ - xpathExpr = (const xmlChar*)param.c_str(); + xpathExpr = reinterpret_cast(param.c_str()); xpathCtx = xmlXPathNewContext(t->m_xml->m_data.doc); if (xpathCtx == NULL) { ms_dbg_a(t, 1, "XML: Unable to create new XPath context. : "); @@ -91,9 +91,9 @@ void XML::evaluate(Transaction *t, } else { std::vector acts = rule->getActionsByName("xmlns", t); for (auto &x : acts) { - actions::XmlNS *z = (actions::XmlNS *)x; - if (xmlXPathRegisterNs(xpathCtx, (const xmlChar*)z->m_scope.c_str(), - (const xmlChar*)z->m_href.c_str()) != 0) { + actions::XmlNS *z = static_cast(x); + if (xmlXPathRegisterNs(xpathCtx, reinterpret_cast(z->m_scope.c_str()), + reinterpret_cast(z->m_href.c_str())) != 0) { ms_dbg_a(t, 1, "Failed to register XML namespace href \"" + \ z->m_href + "\" prefix \"" + z->m_scope + "\"."); return; diff --git a/test/cppcheck_suppressions.txt b/test/cppcheck_suppressions.txt index 2bdc15e85e..8b2f2da182 100644 --- a/test/cppcheck_suppressions.txt +++ b/test/cppcheck_suppressions.txt @@ -31,6 +31,8 @@ accessMoved:seclang-parser.hh returnTempReference:seclang-parser.hh duplInheritedMember:seclang-parser.hh constVariableReference:seclang-parser.hh +uninitMemberVar:seclang-parser.hh + unreadVariable:src/operators/rx.cc unreadVariable:src/operators/rx_global.cc @@ -59,3 +61,4 @@ uselessCallsSubstr // Examples memleak:examples/using_bodies_in_chunks/simple_request.cc +