[M120 Migration][VD] Fix url crash in RequestCertificateConfirm 87/308787/2
authorjingjieli <jingjie.li@samsung.com>
Mon, 1 Apr 2024 05:50:35 +0000 (13:50 +0800)
committerBot Blink <blinkbot@samsung.com>
Tue, 2 Apr 2024 00:02:04 +0000 (00:02 +0000)
The url in RequestCertificateConfirm is get from SSLErrorHandler
in SSLManager::OnCertErrorInternal, and SSLErrorHandler will be
released in certificate error callback.
That means after EWebViewCallbacks::RequestCertificateConfirm,
url can not be used. So copy it before free.

Reference:
https://review.tizen.org/gerrit/#/c/291448/

Change-Id: I4de8a4aeb70b3525f83f92808e1fa2db07f31af9
Signed-off-by: jingjieli <jingjie.li@samsung.com>
tizen_src/ewk/efl_integration/web_contents_delegate_efl.cc

index 9476622..6c4c6e3 100644 (file)
@@ -419,21 +419,22 @@ void WebContentsDelegateEfl::RequestCertificateConfirm(
     bool /*strict_enforcement*/,
     base::OnceCallback<void(CertificateRequestResultType)> callback) {
   std::string pem_certificate;
+  const GURL request_url(url);
   if (!net::X509Certificate::GetPEMEncoded(ssl_info.cert->cert_buffer(),
                                            &pem_certificate)) {
-    LOG(INFO) << "Certificate for URL: " << url.spec()
+    LOG(INFO) << "Certificate for URL: " << request_url.spec()
               << " could not be opened";
     std::move(callback).Run(content::CERTIFICATE_REQUEST_RESULT_TYPE_CANCEL);
     return;
   }
   certificate_policy_decision_.reset(new _Ewk_Certificate_Policy_Decision(
-      url, pem_certificate, is_main_frame_request, cert_error,
+      request_url, pem_certificate, is_main_frame_request, cert_error,
       std::move(callback)));
 
   web_view_->SmartCallback<EWebViewCallbacks::RequestCertificateConfirm>().call(
       certificate_policy_decision_.get());
-  LOG(INFO) << "Certificate policy decision called for URL: " << url.spec()
-            << " with cert_error: " << cert_error;
+  LOG(INFO) << "Certificate policy decision called for URL: "
+            << request_url.spec() << " with cert_error: " << cert_error;
 
   // if policy is suspended, the API takes over the policy object lifetime
   // and policy will be deleted after decision is made
@@ -454,7 +455,8 @@ void WebContentsDelegateEfl::RequestCertificateConfirm(
       // By default chromium-efl allows page to be opened with certificate
       // compromise.
       certificate_policy_decision_->SetDecision(true);
-      LOG(WARNING) << "Certificate for " << url.spec() << " was compromised";
+      LOG(WARNING) << "Certificate for " << request_url.spec()
+                   << " was compromised";
     }
   }
 }