[Webkit-unassigned] [Bug 43776] [Chromium] 51670 WebCore::GeolocationService::positionChanged memory corruption

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Tue Aug 10 15:12:26 PDT 2010


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


Justin Schuh <jschuh at chromium.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
            Summary|Chromium 51670              |[Chromium] 51670
                   |WebCore::GeolocationService |WebCore::GeolocationService
                   |::positionChanged memory    |::positionChanged memory
                   |corruption                  |corruption
                 CC|                            |bulach at chromium.org,
                   |                            |jschuh at chromium.org




--- Comment #1 from Justin Schuh <jschuh at chromium.org>  2010-08-10 15:12:26 PST ---
Marcus, do you mind taking care of this? I poked at it a bit and here's what I've worked out.

It looks like WebGeolocationService::detachBridge() isn't called before the associated WebGeolocationServiceBridge is deleted. So, GeolocationDispatcher::bridges_map_ ends up holding a stale WebGeolocationServiceBridge pointer. The lifetime of these objects seems to be handled in the platform code, and I'm not triggering the same crash in WebKit trunk. So, it's probably Chromium-specific.

Here's the stack snippet where the stale pointer is referenced (haven't identified exactly where the free is occurring yet):

GeolocationDispatcher::OnGeolocationPositionUpdated(const Geoposition & geoposition={...})  Line 104
DispatchToMethod<GeolocationDispatcher,void (__thiscall GeolocationDispatcher::*)(Geoposition const &),Geoposition>(GeolocationDispatcher * obj=0x059eed90, void (const Geoposition &)* method=0x55e653f0, const Tuple1<Geoposition> & arg={...})  Line 499
IPC::MessageWithTuple<Tuple1<Geoposition> >::Dispatch<GeolocationDispatcher,void (__thiscall GeolocationDispatcher::*)(Geoposition const &)>(const IPC::Message * msg=class=16, index=166, GeolocationDispatcher * obj=0x059eed90, void (const Geoposition &)* func=0x55e653f0)  Line 1047

It's also a lot easier to follow the problem in a debugger if you simplify the repro to this:

<meta http-equiv="refresh" content="0">
<script>
  if (location.search)
    window.navigator.geolocation.getCurrentPosition(function(){});
  else
    document.write('<iframe src="' + location + '?go"></iframe>');
</script>


And, just for reference, the bug was originally reported by kuzzcc at:
http://code.google.com/p/chromium/issues/detail?id=51670

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