Title: [225982] trunk/Source/WebKit
Revision
225982
Author
beid...@apple.com
Date
2017-12-15 13:15:17 -0800 (Fri, 15 Dec 2017)

Log Message

Make sure only WebsiteDataStores with valid SessionIDs register themselves.
https://bugs.webkit.org/show_bug.cgi?id=180869

Reviewed by Chris Dumez.

Some code in WebsiteDataStore assumes an invalid SessionID is a possibility,
but we didn't account for that in the map added in r225935.

Seems prudent to make sure we're not doing hash table operations with invalid keys.

* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::WebsiteDataStore):
(WebKit::WebsiteDataStore::~WebsiteDataStore):
(WebKit::WebsiteDataStore::maybeRegisterWithSessionIDMap):
(WebKit::WebsiteDataStore::existingNonDefaultDataStoreForSessionID):
* UIProcess/WebsiteData/WebsiteDataStore.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (225981 => 225982)


--- trunk/Source/WebKit/ChangeLog	2017-12-15 21:12:43 UTC (rev 225981)
+++ trunk/Source/WebKit/ChangeLog	2017-12-15 21:15:17 UTC (rev 225982)
@@ -1,3 +1,22 @@
+2017-12-15  Brady Eidson  <beid...@apple.com>
+
+        Make sure only WebsiteDataStores with valid SessionIDs register themselves.
+        https://bugs.webkit.org/show_bug.cgi?id=180869
+
+        Reviewed by Chris Dumez.
+
+        Some code in WebsiteDataStore assumes an invalid SessionID is a possibility,
+        but we didn't account for that in the map added in r225935.
+
+        Seems prudent to make sure we're not doing hash table operations with invalid keys.
+
+        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+        (WebKit::WebsiteDataStore::WebsiteDataStore):
+        (WebKit::WebsiteDataStore::~WebsiteDataStore):
+        (WebKit::WebsiteDataStore::maybeRegisterWithSessionIDMap):
+        (WebKit::WebsiteDataStore::existingNonDefaultDataStoreForSessionID):
+        * UIProcess/WebsiteData/WebsiteDataStore.h:
+
 2017-12-14  Simon Fraser  <simon.fra...@apple.com>
 
         Rotating when zoomed in with fingers down can result in a broken tab

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (225981 => 225982)


--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp	2017-12-15 21:12:43 UTC (rev 225981)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp	2017-12-15 21:15:17 UTC (rev 225982)
@@ -78,11 +78,7 @@
     , m_storageManager(StorageManager::create(m_configuration.localStorageDirectory))
     , m_queue(WorkQueue::create("com.apple.WebKit.WebsiteDataStore"))
 {
-    if (m_sessionID != PAL::SessionID::defaultSessionID()) {
-        auto result = nonDefaultDataStores().add(sessionID, this);
-        ASSERT_UNUSED(result, result.isNewEntry);
-    }
-
+    maybeRegisterWithSessionIDMap();
     platformInitialize();
 }
 
@@ -91,32 +87,33 @@
     , m_configuration()
     , m_queue(WorkQueue::create("com.apple.WebKit.WebsiteDataStore"))
 {
-    if (m_sessionID != PAL::SessionID::defaultSessionID()) {
-        auto result = nonDefaultDataStores().add(sessionID, this);
-        ASSERT_UNUSED(result, result.isNewEntry);
-    }
-    
+    maybeRegisterWithSessionIDMap();
     platformInitialize();
 }
 
 WebsiteDataStore::~WebsiteDataStore()
 {
-    if (m_sessionID != PAL::SessionID::defaultSessionID()) {
-        ASSERT(nonDefaultDataStores().get(m_sessionID) == this);
-        nonDefaultDataStores().remove(m_sessionID);
-    }
-
     platformDestroy();
 
     if (m_sessionID.isValid() && m_sessionID != PAL::SessionID::defaultSessionID()) {
+        ASSERT(nonDefaultDataStores().get(m_sessionID) == this);
+        nonDefaultDataStores().remove(m_sessionID);
         for (auto& processPool : WebProcessPool::allProcessPools())
             processPool->sendToNetworkingProcess(Messages::NetworkProcess::DestroySession(m_sessionID));
     }
 }
 
+void WebsiteDataStore::maybeRegisterWithSessionIDMap()
+{
+    if (m_sessionID.isValid() && m_sessionID != PAL::SessionID::defaultSessionID()) {
+        auto result = nonDefaultDataStores().add(m_sessionID, this);
+        ASSERT_UNUSED(result, result.isNewEntry);
+    }
+}
+
 WebsiteDataStore* WebsiteDataStore::existingNonDefaultDataStoreForSessionID(PAL::SessionID sessionID)
 {
-    return nonDefaultDataStores().get(sessionID);
+    return sessionID.isValid() && sessionID != PAL::SessionID::defaultSessionID() ? nonDefaultDataStores().get(sessionID) : nullptr;
 }
 
 WebProcessPool* WebsiteDataStore::processPoolForCookieStorageOperations()

Modified: trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h (225981 => 225982)


--- trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h	2017-12-15 21:12:43 UTC (rev 225981)
+++ trunk/Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h	2017-12-15 21:15:17 UTC (rev 225982)
@@ -183,6 +183,8 @@
     static void removeMediaKeys(const String& mediaKeysStorageDirectory, std::chrono::system_clock::time_point modifiedSince);
     static void removeMediaKeys(const String& mediaKeysStorageDirectory, const HashSet<WebCore::SecurityOriginData>&);
 
+    void maybeRegisterWithSessionIDMap();
+
     const PAL::SessionID m_sessionID;
 
     const Configuration m_configuration;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to