Stale SVGUseElement reference in CachedResource::checkNotify()
authorfmalita@chromium.org <fmalita@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 4 Dec 2012 19:35:30 +0000 (19:35 +0000)
committerfmalita@chromium.org <fmalita@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 4 Dec 2012 19:35:30 +0000 (19:35 +0000)
commit9151aaaa4661a6386d5b5ca6ce4edbe7c1b6fb81
treefe079932e35017f1e31d105aae0281e998fe9188
parent0f6f4c756683ad077adb54fb1f87afa0e0847d6d
Stale SVGUseElement reference in CachedResource::checkNotify()
https://bugs.webkit.org/show_bug.cgi?id=104004

Reviewed by Eric Seidel.

Source/WebCore:

SVGUseElement tracks one CachedSVGDocument at a time (for external references), but when
the href attribute is updated it fails to unregister with the current CachedSVGDocument
and only updates its CachedSVGDocument with the new instance. This leaves an untracked
reference with the original CachedSVGDocument.

The patch adds the missing removeClient() call on href change, and encapsulates the
CachedSVGDocument manipulation in a helper method which handles the necessary cleanup.

Test: svg/custom/use-href-update-crash.svg

* svg/SVGUseElement.cpp:
(WebCore::SVGUseElement::~SVGUseElement):
(WebCore::SVGUseElement::svgAttributeChanged):
(WebCore::SVGUseElement::setCachedDocument):
(WebCore):
* svg/SVGUseElement.h:
(SVGUseElement):

LayoutTests:

* svg/custom/use-href-update-crash-expected.txt: Added.
* svg/custom/use-href-update-crash.svg: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@136541 268f45cc-cd09-0410-ab3c-d52691b4dbfc
LayoutTests/ChangeLog
LayoutTests/svg/custom/use-href-update-crash-expected.txt [new file with mode: 0644]
LayoutTests/svg/custom/use-href-update-crash.svg [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/svg/SVGUseElement.cpp
Source/WebCore/svg/SVGUseElement.h