Commit ded82970 authored by garciay's avatar garciay
Browse files

Memory de-allocation missing in case of error

parent 0fbf9212
Loading
Loading
Loading
Loading
+20 −20
Original line number Diff line number Diff line
@@ -125,6 +125,7 @@ int certificates_loader::build_certificates_cache(std::set<std::experimental::fi
  loggers::get_instance().log(">>> certificates_loader::build_certificates_cache");

  std::set<std::experimental::filesystem::path>::const_iterator it = p_files.cbegin();
  std::pair<std::map<std::string, std::unique_ptr<security_db_record> >::iterator, bool> result;
  do {
    loggers::get_instance().log("certificates_loader::build_certificates_cache: Caching '%s'", it->string().c_str());
    std::experimental::filesystem::path p = *it;
@@ -270,8 +271,7 @@ int certificates_loader::build_certificates_cache(std::set<std::experimental::fi
        loggers::get_instance().log_to_hexa("certificates_loader::build_certificates_cache: issuer: ", issuer.data(), issuer.size());
        
        // Create new record
        p_certificates.insert(std::pair<const std::string, std::unique_ptr<security_db_record> >(key, std::unique_ptr<security_db_record>(
                                                                                                                                          new security_db_record(
        security_db_record* p = new security_db_record(
                                                       key,
                                                       certificate, // Certificate
                                                       decoded_certificate,
@@ -285,14 +285,14 @@ int certificates_loader::build_certificates_cache(std::set<std::experimental::fi
                                                       public_enc_key_x, // Public enciption key X-coordinate
                                                       public_enc_key_y, // Public enciption key Y-coordinate
                                                       public_enc_comp_key // Public compressed enciption key
                                                                                                                                                                 ))
                                                                                                 ));
        std::map<std::string, std::unique_ptr<security_db_record> >::const_iterator i = p_certificates.find(key);
        if (i == p_certificates.cend()) {
                                                       );
        result = p_certificates.insert(std::pair<const std::string, std::unique_ptr<security_db_record> >(key, std::unique_ptr<security_db_record>(p)));
        if (result.second == false) {
          loggers::get_instance().warning("certificates_loader::build_certificates_cache: Failed to insert new record '%s'", key.c_str());
          delete p;
          return -1;
        }
        p_hashed_id8s.insert(std::pair<std::vector<unsigned char>, std::string>(i->second.get()->hashed_id(), i->first));
        p_hashed_id8s.insert(std::pair<std::vector<unsigned char>, std::string>(result.first->second.get()->hashed_id(), result.first->first));
        
        // Reset pointer
        it = p_files.cbegin();
+10 −10
Original line number Diff line number Diff line
@@ -270,7 +270,7 @@ int security_cache::store_certificate(const CHARSTRING& p_cert_id, const OCTETST
  }
  _certificates.insert(std::pair<std::string, std::unique_ptr<security_db_record> >(key, std::unique_ptr<security_db_record>(p)));
  _hashed_id8s.insert(std::pair<std::vector<unsigned char>, std::string&>(hashed_id8, key));
  dump();
  //dump();

  return 0;
}