[Webkit-unassigned] [Bug 29910] Load state can get out of sync in a client callback, leading to a crash.

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Wed Sep 30 09:31:03 PDT 2009


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





--- Comment #4 from Yael <yael.aharon at nokia.com>  2009-09-30 09:31:03 PDT ---

Thank you for your review. 

> 3 - We *NEED* to start enforcing layouttests for loader changes like these.

I agree with you that some additional testing should be added. If you could
help me understand how to create a test for this complex use case, and I would
be happy to do that.


> Elaborations:
> 1 - Before we jump the gun on this change, I'd like some more details of what
> the problem actually is.  Your description of the bug sounds theoretical -
> could you post a crash log and steps to reproduce?

This crash happened in S60 environment and I could not attach crash log, but I
did attach a callstack leading to the crash. Some explanation of the use case
might help:

This crash was observed when I opened the Browser and the first url I tried to
load was a non-existing html file from the file system. Inside the progress
callback of the first load, the browser sets a new user stylesheet, which leads
to a new load request.

The actual crash happens when we select an active document loader to load the
user stylesheet.

DocumentLoader* FrameLoader::activeDocumentLoader() const
{
    if (m_state == FrameStateProvisional) 
        return m_provisionalDocumentLoader.get();
    return m_documentLoader.get();
}

The state is still FrameStateProvisional, but m_provisionalDocumentLoader was
already set to NULL. This returns a NULL DocumentLoader, leading to a crash.


> 2 - This pattern of setting FrameStateComplete after the progressCompleted()
> callback occurs more than once, and appears to have been a deliberate decision.
>  While I have no direct evidence it's the wrong change, my Spidey Sense is
> tingling.

Could you refer me to where is this pattern used? In FrameLoader.cpp,
ProgressComplete() is called from 2 places. The second place is 
checkLoadCompleteForThisFrame(), and it is called after markLoadComplete() is
called.

> 3 - If we clear up #1 and #2, I'm sure I can help find a way to layouttest
> this.

I appreciate your help here.

-- 
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