Przeglądaj źródła

TLS: Fix dangling str() pointers

Nils Maier 12 lat temu
rodzic
commit
d560bf0e6f
2 zmienionych plików z 6 dodań i 4 usunięć
  1. 3 2
      src/LibgnutlsTLSContext.cc
  2. 3 2
      src/LibsslTLSContext.cc

+ 3 - 2
src/LibgnutlsTLSContext.cc

@@ -111,9 +111,10 @@ bool GnuTLSContext::addP12CredentialFile(const std::string& p12file)
 {
   std::stringstream ss;
   BufferedFile(p12file.c_str(), "rb").transfer(ss);
+  auto datastr = ss.str();
   const gnutls_datum_t data = {
-    (unsigned char*)ss.str().c_str(),
-    (unsigned int)ss.str().length()
+    (unsigned char*)datastr.c_str(),
+    (unsigned int)datastr.length()
   };
   int err = gnutls_certificate_set_x509_simple_pkcs12_mem(
       certCred_, &data, GNUTLS_X509_FMT_DER, "");

+ 3 - 2
src/LibsslTLSContext.cc

@@ -135,8 +135,9 @@ bool OpenSSLTLSContext::addP12CredentialFile(const std::string& p12file)
   std::stringstream ss;
   BufferedFile(p12file.c_str(), "rb").transfer(ss);
 
-  void *ptr = const_cast<char*>(ss.str().c_str());
-  size_t len = ss.str().length();
+  auto data = ss.str();
+  void *ptr = const_cast<char*>(data.c_str());
+  size_t len = data.length();
   std::unique_ptr<BIO, bio_deleter> bio(BIO_new_mem_buf(ptr, len));
   A2_LOG_DEBUG(fmt("p12 size: %" PRIu64, len));