File 0001-Fix-use-after-free-on-Linux-at-shutdown.patch of Package libqt5-qtwebengine

From a626223077ffe7ed4efe8ee15b4dbd16addbce61 Mon Sep 17 00:00:00 2001
From: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
Date: Thu, 18 Feb 2016 13:11:47 +0100
Subject: Fix use-after-free on Linux at shutdown

The address tracker has a file-description watcher that references
a libevent event that is deleted when the message-loop is deleted.

Fixed by deleting the address-tracker before message-loop.

Change-Id: I18e98e405138be95b86f6418ac639c297a39a9d0
Reviewed-by: Joerg Bornemann <joerg.bornemann@theqtcompany.com>
---
 chromium/net/base/network_change_notifier_linux.cc | 13 +++++++------
 1 file changed, 7 insertions(+), 6 deletions(-)

diff --git a/src/3rdparty/chromium/net/base/network_change_notifier_linux.cc b/src/3rdparty/chromium/net/base/network_change_notifier_linux.cc
index e1e7de0..44af93c 100644
--- a/src/3rdparty/chromium/net/base/network_change_notifier_linux.cc
+++ b/src/3rdparty/chromium/net/base/network_change_notifier_linux.cc
@@ -21,11 +21,11 @@ class NetworkChangeNotifierLinux::Thread : public base::Thread {
   // Plumbing for NetworkChangeNotifier::GetCurrentConnectionType.
   // Safe to call from any thread.
   NetworkChangeNotifier::ConnectionType GetCurrentConnectionType() {
-    return address_tracker_.GetCurrentConnectionType();
+    return address_tracker_->GetCurrentConnectionType();
   }
 
   const internal::AddressTrackerLinux* address_tracker() const {
-    return &address_tracker_;
+    return address_tracker_.get();
   }
 
  protected:
@@ -38,7 +38,7 @@ class NetworkChangeNotifierLinux::Thread : public base::Thread {
   void OnLinkChanged();
   scoped_ptr<DnsConfigService> dns_config_service_;
   // Used to detect online/offline state and IP address changes.
-  internal::AddressTrackerLinux address_tracker_;
+  scoped_ptr<internal::AddressTrackerLinux> address_tracker_;
   NetworkChangeNotifier::ConnectionType last_type_;
 
   DISALLOW_COPY_AND_ASSIGN(Thread);
@@ -47,13 +47,13 @@ class NetworkChangeNotifierLinux::Thread : public base::Thread {
 NetworkChangeNotifierLinux::Thread::Thread(
     const base::hash_set<std::string>& ignored_interfaces)
     : base::Thread("NetworkChangeNotifier"),
-      address_tracker_(
+      address_tracker_(new internal::AddressTrackerLinux(
           base::Bind(&NetworkChangeNotifierLinux::Thread::OnIPAddressChanged,
                      base::Unretained(this)),
           base::Bind(&NetworkChangeNotifierLinux::Thread::OnLinkChanged,
                      base::Unretained(this)),
           base::Bind(base::DoNothing),
-          ignored_interfaces),
+          ignored_interfaces)),
       last_type_(NetworkChangeNotifier::CONNECTION_NONE) {
 }
 
@@ -62,13 +62,14 @@ NetworkChangeNotifierLinux::Thread::~Thread() {
 }
 
 void NetworkChangeNotifierLinux::Thread::Init() {
-  address_tracker_.Init();
+  address_tracker_->Init();
   dns_config_service_ = DnsConfigService::CreateSystemService();
   dns_config_service_->WatchConfig(
       base::Bind(&NetworkChangeNotifier::SetDnsConfig));
 }
 
 void NetworkChangeNotifierLinux::Thread::CleanUp() {
+  address_tracker_.reset();
   dns_config_service_.reset();
 }
 
-- 
cgit v1.0-4-g1e03

openSUSE Build Service is sponsored by