[M94 Migration] Create |net::CertVerifier| on UI thread. 70/267870/1
authorGajendra N <gajendra.n@samsung.com>
Fri, 10 Dec 2021 17:36:17 +0000 (23:06 +0530)
committerGajendra N <gajendra.n@samsung.com>
Fri, 10 Dec 2021 17:42:51 +0000 (17:42 +0000)
|net::CertVerifier::CreateDefault()| invokes |getenv| which
is not thread safe function [1].
Previously, |net::CertVerifier::CreateDefault()| was called in
|GetURLRequestContext()| which is running on |BrowserThread::IO|.
So sometime it has crash because of accessing invalid address.

This patch creates |net::CertVerifier| on constructor which is
running on |BrowserThread::UI| and uses when it necessary.

[1] : https://rachelbythebay.com/w/2017/01/30/env/

Reference: https://review.tizen.org/gerrit/261757

Change-Id: I587f7377d64cfaaf57a258af2c8914c28787cf3b
Signed-off-by: Gajendra N <gajendra.n@samsung.com>
tizen_src/ewk/efl_integration/url_request_context_getter_efl.cc
tizen_src/ewk/efl_integration/url_request_context_getter_efl.h

index 437244b40212807857d93f97b0b6943250df2b0e..400fb3b80d9072106c220236e370dc10c389ddeb 100644 (file)
@@ -57,6 +57,9 @@ URLRequestContextGetterEfl::URLRequestContextGetterEfl(
   // Must first be created on the UI thread.
   DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
 
+  cert_verifier_ =
+      net::CertVerifier::CreateDefault(/*cert_net_fetcher=*/nullptr);
+
   proxy_config_service_ =
       net::ConfiguredProxyResolutionService::CreateSystemProxyConfigService(
           io_task_runner);
@@ -107,8 +110,7 @@ net::URLRequestContext* URLRequestContextGetterEfl::GetURLRequestContext() {
             command_line.GetSwitchValueASCII(network::switches::kHostResolverRules)));
     storage_->set_host_resolver(std::move(host_resolver));
 
-    storage_->set_cert_verifier(
-        net::CertVerifier::CreateDefault(/*cert_net_fetcher=*/nullptr));
+    storage_->set_cert_verifier(std::move(cert_verifier_));
     storage_->set_transport_security_state(
         base::WrapUnique(new net::TransportSecurityState));
     storage_->set_ct_policy_enforcer(
index 97464f4d70ebdb564dc8374459b9c54563da97af..771d8e817232cfe79e3eb54462cc39913a87150e 100644 (file)
@@ -19,6 +19,7 @@
 #include "public/ewk_cookie_manager_internal.h"
 
 namespace net {
+class CertVerifier;
 class HostResolver;
 class NetLog;
 }
@@ -80,6 +81,7 @@ class URLRequestContextGetterEfl : public net::URLRequestContextGetter {
   std::unique_ptr<net::ProxyConfigService> proxy_config_service_;
   std::unique_ptr<net::NetworkDelegate> network_delegate_;
   std::unique_ptr<net::URLRequestContextStorage> storage_;
+  std::unique_ptr<net::CertVerifier> cert_verifier_;
   std::unique_ptr<net::URLRequestContext> url_request_context_;
   base::WeakPtrFactory<URLRequestContextGetterEfl> weak_ptr_factory_;