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

Changeset 201565 in webkit


Ignore:
Timestamp:
Jun 1, 2016, 1:15:23 PM (10 years ago)
Author:
commit-queue@webkit.org
Message:

Fix null dereferencing in ResourceTimingInformation::addResourceTiming
https://bugs.webkit.org/show_bug.cgi?id=158266
rdar://problem/26528466

Patch by Alex Christensen <achristensen@webkit.org> on 2016-06-01
Reviewed by Chris Dumez.

This would crash sometimes in http/tests/security/cross-frame-access-custom.html

  • loader/ResourceTimingInformation.cpp:

(WebCore::ResourceTimingInformation::addResourceTiming):

  • loader/ResourceTimingInformation.h:
  • loader/cache/CachedResourceLoader.cpp:

(WebCore::CachedResourceLoader::requestResource):
(WebCore::CachedResourceLoader::loadDone):
We would dereference a null pointer on the first instruction when calling
Document::parentDocument from ResourceTimingInformation::addResourceTiming,
which means the document was null. CachedResourceLoader::document even has
a comment saying it can be null, so we should check it before using it.

Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r201561 r201565  
     12016-06-01  Alex Christensen  <achristensen@webkit.org>
     2
     3        Fix null dereferencing in ResourceTimingInformation::addResourceTiming
     4        https://bugs.webkit.org/show_bug.cgi?id=158266
     5        rdar://problem/26528466
     6
     7        Reviewed by Chris Dumez.
     8
     9        This would crash sometimes in http/tests/security/cross-frame-access-custom.html
     10
     11        * loader/ResourceTimingInformation.cpp:
     12        (WebCore::ResourceTimingInformation::addResourceTiming):
     13        * loader/ResourceTimingInformation.h:
     14        * loader/cache/CachedResourceLoader.cpp:
     15        (WebCore::CachedResourceLoader::requestResource):
     16        (WebCore::CachedResourceLoader::loadDone):
     17        We would dereference a null pointer on the first instruction when calling
     18        Document::parentDocument from ResourceTimingInformation::addResourceTiming,
     19        which means the document was null.  CachedResourceLoader::document even has
     20        a comment saying it can be null, so we should check it before using it.
     21
    1222016-06-01  Said Abou-Hallawa  <sabouhallawa@apple.com>
    223
  • trunk/Source/WebCore/loader/ResourceTimingInformation.cpp

    r201447 r201565  
    3939namespace WebCore {
    4040
    41 void ResourceTimingInformation::addResourceTiming(CachedResource* resource, Document* document)
     41void ResourceTimingInformation::addResourceTiming(CachedResource* resource, Document& document)
    4242{
    4343    ASSERT(RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled());
    4444    if (resource && resource->resourceRequest().url().protocolIsInHTTPFamily()
    4545        && ((!resource->errorOccurred() && !resource->wasCanceled()) || resource->response().httpStatusCode() == 304)) {
    46         HashMap<CachedResource*, InitiatorInfo>::iterator initiatorIt = m_initiatorMap.find(resource);
     46        auto initiatorIt = m_initiatorMap.find(resource);
    4747        if (initiatorIt != m_initiatorMap.end() && initiatorIt->value.added == NotYetAdded) {
    48             ASSERT(document);
    49             Document* initiatorDocument = document;
     48            Document* initiatorDocument = &document;
    5049            if (resource->type() == CachedResource::MainResource)
    51                 initiatorDocument = document->parentDocument();
     50                initiatorDocument = document.parentDocument();
    5251            ASSERT(initiatorDocument);
    5352            ASSERT(initiatorDocument->domWindow());
  • trunk/Source/WebCore/loader/ResourceTimingInformation.h

    r201415 r201565  
    4242public:
    4343
    44     void addResourceTiming(CachedResource*, Document*);
     44    void addResourceTiming(CachedResource*, Document&);
    4545    void storeResourceTimingInitiatorInformation(const CachedResourceHandle<CachedResource>&, const CachedResourceRequest&, Frame*);
    4646
  • trunk/Source/WebCore/loader/cache/CachedResourceLoader.cpp

    r201539 r201565  
    620620        memoryCache.resourceAccessed(*resource);
    621621#if ENABLE(WEB_TIMING)
    622         if (RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled()) {
     622        if (document() && RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled()) {
    623623            m_resourceTimingInfo.storeResourceTimingInitiatorInformation(resource, request, frame());
    624             m_resourceTimingInfo.addResourceTiming(resource.get(), document());
     624            m_resourceTimingInfo.addResourceTiming(resource.get(), *document());
    625625        }
    626626#endif
     
    968968
    969969#if ENABLE(WEB_TIMING)
    970     if (RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled())
    971         m_resourceTimingInfo.addResourceTiming(resource, document());
     970    if (document() && RuntimeEnabledFeatures::sharedFeatures().resourceTimingEnabled())
     971        m_resourceTimingInfo.addResourceTiming(resource, *document());
    972972#else
    973973    UNUSED_PARAM(resource);
Note: See TracChangeset for help on using the changeset viewer.