⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 202922 in webkit


Ignore:
Timestamp:
Jul 7, 2016, 11:47:51 AM (10 years ago)
Author:
andersca@apple.com
Message:

Memory corruption destroying PaymentCoordinator
https://bugs.webkit.org/show_bug.cgi?id=159516
rdar://problem/27222857

Reviewed by Tim Horton.

Introduce a new MessageReceiverMap::removeMessageReceiver that takes a MessageReceiver
and removes all traces of it in the message receiver map. Use it in the WebPaymentCoordinator destructor.

  • Platform/IPC/MessageReceiverMap.cpp:

(IPC::MessageReceiverMap::removeMessageReceiver):

  • Platform/IPC/MessageReceiverMap.h:
  • Shared/ChildProcess.cpp:

(WebKit::ChildProcess::removeMessageReceiver):

  • Shared/ChildProcess.h:
  • WebProcess/ApplePay/WebPaymentCoordinator.cpp:

(WebKit::WebPaymentCoordinator::~WebPaymentCoordinator):

Location:
trunk/Source/WebKit2
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r202898 r202922  
     12016-07-07  Anders Carlsson  <andersca@apple.com>
     2
     3        Memory corruption destroying PaymentCoordinator
     4        https://bugs.webkit.org/show_bug.cgi?id=159516
     5        rdar://problem/27222857
     6
     7        Reviewed by Tim Horton.
     8
     9        Introduce a new MessageReceiverMap::removeMessageReceiver that takes a MessageReceiver
     10        and removes all traces of it in the message receiver map. Use it in the WebPaymentCoordinator destructor.
     11
     12        * Platform/IPC/MessageReceiverMap.cpp:
     13        (IPC::MessageReceiverMap::removeMessageReceiver):
     14        * Platform/IPC/MessageReceiverMap.h:
     15        * Shared/ChildProcess.cpp:
     16        (WebKit::ChildProcess::removeMessageReceiver):
     17        * Shared/ChildProcess.h:
     18        * WebProcess/ApplePay/WebPaymentCoordinator.cpp:
     19        (WebKit::WebPaymentCoordinator::~WebPaymentCoordinator):
     20
    1212016-07-07  Csaba Osztrogonác  <ossy@webkit.org>
    222
  • trunk/Source/WebKit2/Platform/IPC/MessageReceiverMap.cpp

    r186464 r202922  
    7878}
    7979
     80void MessageReceiverMap::removeMessageReceiver(MessageReceiver& messageReceiver)
     81{
     82    Vector<StringReference> globalReceiversToRemove;
     83    for (auto& nameAndReceiver : m_globalMessageReceivers) {
     84        if (nameAndReceiver.value == &messageReceiver)
     85            globalReceiversToRemove.append(nameAndReceiver.key);
     86    }
     87
     88    for (auto& globalReceiverToRemove : globalReceiversToRemove)
     89        removeMessageReceiver(globalReceiverToRemove);
     90
     91    Vector<std::pair<StringReference, uint64_t>> receiversToRemove;
     92    for (auto& nameAndIdAndReceiver : m_messageReceivers) {
     93        if (nameAndIdAndReceiver.value == &messageReceiver)
     94            receiversToRemove.append(std::make_pair(nameAndIdAndReceiver.key.first, nameAndIdAndReceiver.key.second));
     95    }
     96
     97    for (auto& receiverToRemove : receiversToRemove)
     98        removeMessageReceiver(receiverToRemove.first, receiverToRemove.second);
     99}
     100
    80101void MessageReceiverMap::invalidate()
    81102{
  • trunk/Source/WebKit2/Platform/IPC/MessageReceiverMap.h

    r177917 r202922  
    4848    void removeMessageReceiver(StringReference messageReceiverName);
    4949    void removeMessageReceiver(StringReference messageReceiverName, uint64_t destinationID);
     50    void removeMessageReceiver(MessageReceiver&);
    5051
    5152    void invalidate();
  • trunk/Source/WebKit2/Shared/ChildProcess.cpp

    r202723 r202922  
    121121}
    122122
     123void ChildProcess::removeMessageReceiver(IPC::MessageReceiver& messageReceiver)
     124{
     125    m_messageReceiverMap.removeMessageReceiver(messageReceiver);
     126}
     127
    123128void ChildProcess::disableTermination()
    124129{
  • trunk/Source/WebKit2/Shared/ChildProcess.h

    r202723 r202922  
    6666    void removeMessageReceiver(IPC::StringReference messageReceiverName, uint64_t destinationID);
    6767    void removeMessageReceiver(IPC::StringReference messageReceiverName);
     68    void removeMessageReceiver(IPC::MessageReceiver&);
    6869
    6970    void setProcessSuppressionEnabled(bool);
  • trunk/Source/WebKit2/WebProcess/ApplePay/WebPaymentCoordinator.cpp

    r202570 r202922  
    4848WebPaymentCoordinator::~WebPaymentCoordinator()
    4949{
    50     WebProcess::singleton().removeMessageReceiver(Messages::WebPaymentCoordinator::messageReceiverName(), m_webPage.pageID());
     50    WebProcess::singleton().removeMessageReceiver(*this);
    5151}
    5252
Note: See TracChangeset for help on using the changeset viewer.