[Webkit-unassigned] [Bug 56301] New: chrome.dll!WebCore::RenderBlock::removeFloatingObjectsBelow ReadAV at NULL (928f227631041a7b4b71dd15efeae337)

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Mon Mar 14 03:40:31 PDT 2011


https://bugs.webkit.org/show_bug.cgi?id=56301

           Summary: chrome.dll!WebCore::RenderBlock::removeFloatingObjects
                    Below ReadAV at NULL (928f227631041a7b4b71dd15efeae337)
           Product: WebKit
           Version: 528+ (Nightly build)
          Platform: PC
        OS/Version: Windows Vista
            Status: NEW
          Severity: Normal
          Priority: P1
         Component: HTML DOM
        AssignedTo: webkit-unassigned at lists.webkit.org
        ReportedBy: skylined at chromium.org
                CC: eric at webkit.org


Created an attachment (id=85664)
 --> (https://bugs.webkit.org/attachment.cgi?id=85664&action=review)
Repro

Chromium: http://code.google.com/p/chromium/issues/detail?id=76033

Repro:
xxxxxxxxxxxxxxxxx--><img border>+++++++++++++++++++++xxxxxxxxxxxxxxxxxxxxxxxxxxxx><
<style>
  *{
    -webkit-columns:auto 3;
    margin-bottom:.87%;
    border-left-width:thick;
    float:right;
  }
</style>

The code hits this assert:
    template<typename T, size_t inlineCapacity, typename U>
    inline T& ListHashSet<T, inlineCapacity, U>::last()
    {
        ASSERT(!isEmpty());
        return m_tail->m_value;
    }
When executing "curr = floatingObjectSet.last()" because "floatingObjectSet" is empty in:
void RenderBlock::removeFloatingObjectsBelow(FloatingObject* lastFloat, int logicalOffset)
{
    if (!m_floatingObjects)
        return;

    FloatingObjectSet& floatingObjectSet = m_floatingObjects->set();
    FloatingObject* curr = floatingObjectSet.last();
    while (curr != lastFloat && (!curr->isPlaced() || logicalTopForFloat(curr) >= logicalOffset)) {
        m_floatingObjects->decreaseObjectsCount(curr->type());
        floatingObjectSet.removeLast();
        delete curr;
        curr = floatingObjectSet.last();
    }
}

This code was called with "lastFloat" == 0, from "void RenderBlock::layoutInlineChildren(bool relayoutChildren, int& repaintLogicalTop, int& repaintLogicalBottom)", because the set of floating objects is empty, which is probably where the issue originates. The function is a bit too complex to do a quick analysis, but it's safe to say this is a NULL ptr crash and not a security issue.

id:             chrome.dll!WebCore::RenderBlock::removeFloatingObjectsBelow ReadAV at NULL (928f227631041a7b4b71dd15efeae337)
description:    Attempt to read from unallocated NULL pointer in chrome.dll!WebCore::RenderBlock::removeFloatingObjectsBelow
application:    Chromium 12.0.704.0
stack:          chrome.dll!WebCore::RenderBlock::removeFloatingObjectsBelow
                chrome.dll!WebCore::RenderBlock::layoutInlineChildren
                chrome.dll!WebCore::RenderBlock::layoutBlock
                chrome.dll!WebCore::RenderBlock::layoutColumns
                chrome.dll!WebCore::RenderBlock::layoutBlock
                chrome.dll!WebCore::RenderBlock::layout
                chrome.dll!WebCore::RenderBlock::insertFloatingObject
                chrome.dll!WebCore::RenderBlock::layoutBlockChildren
                chrome.dll!WebCore::RenderBlock::layoutBlock
                chrome.dll!WebCore::RenderBlock::layout
                chrome.dll!WebCore::RenderBlock::insertFloatingObject
                chrome.dll!WebCore::RenderBlock::layoutBlockChildren
                chrome.dll!WebCore::RenderBlock::layoutBlock
                chrome.dll!WebCore::RenderBlock::layout
                chrome.dll!WebCore::RenderView::layout
                chrome.dll!WebCore::FrameView::layout
                chrome.dll!WebCore::Document::implicitClose
                chrome.dll!WebCore::FrameLoader::checkCompleted
                chrome.dll!WebCore::FrameLoader::finishedParsing
                chrome.dll!WebCore::Document::finishedParsing
                chrome.dll!WebCore::HTMLDocumentParser::prepareToStopParsing
                chrome.dll!WebCore::DocumentWriter::endIfNotLoadingMainResource
                chrome.dll!WebCore::FrameLoader::finishedLoading
                chrome.dll!WebCore::MainResourceLoader::didFinishLoading
                chrome.dll!WebCore::ResourceLoader::didFinishLoading
                chrome.dll!WebCore::ResourceHandleInternal::didFinishLoading
                chrome.dll!webkit_glue::WebURLLoaderImpl::Context::OnCompletedRequest
                chrome.dll!ResourceDispatcher::OnRequestComplete
                chrome.dll!IPC::MessageWithTuple<...>::Dispatch<...>
                chrome.dll!ResourceDispatcher::DispatchMessageW
                chrome.dll!ResourceDispatcher::OnMessageReceived
                chrome.dll!ChildThread::OnMessageReceived
                chrome.dll!RunnableMethod<...>::Run
                chrome.dll!MessageLoop::RunTask
                chrome.dll!MessageLoop::DoWork
                chrome.dll!base::MessagePumpDefault::Run
                chrome.dll!MessageLoop::RunInternal
                chrome.dll!MessageLoop::Run
                chrome.dll!RendererMain

-- 
Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.



More information about the webkit-unassigned mailing list