Null dereference in SVGTextElement::animatedLocalTransform()
authorschenney@chromium.org <schenney@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 28 Mar 2012 14:28:02 +0000 (14:28 +0000)
committerschenney@chromium.org <schenney@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 28 Mar 2012 14:28:02 +0000 (14:28 +0000)
https://bugs.webkit.org/show_bug.cgi?id=82375

Reviewed by Nikolas Zimmermann.

Source/WebCore:

A poorly structured SVG file with a text element inside an
animatedTransform element leaves the text element placed outside of
the SVG root and it has no renderer(). Later attempts to use the
renderer in animatedLocalTransform fail.

Test: svg/custom/get-text-element-transform-crash.html

* svg/SVGTextElement.cpp:
(WebCore::SVGTextElement::animatedLocalTransform): Added a check for null renderer, and do not check
for style transform if there is no renderer.

LayoutTests:

* svg/custom/get-text-element-transform-crash-expected.txt: Added.
* svg/custom/get-text-element-transform-crash.html: Added.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@112394 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/svg/custom/get-text-element-transform-crash-expected.txt [new file with mode: 0644]
LayoutTests/svg/custom/get-text-element-transform-crash.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/svg/SVGTextElement.cpp

index e1e5d3b..38869e0 100644 (file)
@@ -1,3 +1,13 @@
+2012-03-28  Stephen Chenney  <schenney@chromium.org>
+
+        Null dereference in SVGTextElement::animatedLocalTransform()
+        https://bugs.webkit.org/show_bug.cgi?id=82375
+
+        Reviewed by Nikolas Zimmermann.
+
+        * svg/custom/get-text-element-transform-crash-expected.txt: Added.
+        * svg/custom/get-text-element-transform-crash.html: Added.
+
 2012-03-27  Nikolas Zimmermann  <nzimmermann@rim.com>
 
         Enable animVal support for SVGAnimatedPreserveAspectRatio
diff --git a/LayoutTests/svg/custom/get-text-element-transform-crash-expected.txt b/LayoutTests/svg/custom/get-text-element-transform-crash-expected.txt
new file mode 100644 (file)
index 0000000..7ef22e9
--- /dev/null
@@ -0,0 +1 @@
+PASS
diff --git a/LayoutTests/svg/custom/get-text-element-transform-crash.html b/LayoutTests/svg/custom/get-text-element-transform-crash.html
new file mode 100644 (file)
index 0000000..20de07a
--- /dev/null
@@ -0,0 +1,23 @@
+<html>
+  <head>
+    <script type="application/javascript">
+      function test() {
+        document.getElementById("crash").getTransformToElement();
+      }
+
+      if (window.layoutTestController) {
+        layoutTestController.dumpAsText();
+      }
+
+    </script>
+  </head>
+  <body>
+    <svg xmlns="http://www.w3.org/2000/svg" version="1.1" onload="test()">
+      <animateTransform >
+        <text id="crash">
+        </text>
+      </animateTransform>
+    </svg>
+    PASS
+  </body>
+</html>
index d5c654d..81f1530 100644 (file)
@@ -1,3 +1,21 @@
+2012-03-28  Stephen Chenney  <schenney@chromium.org>
+
+        Null dereference in SVGTextElement::animatedLocalTransform()
+        https://bugs.webkit.org/show_bug.cgi?id=82375
+
+        Reviewed by Nikolas Zimmermann.
+
+        A poorly structured SVG file with a text element inside an
+        animatedTransform element leaves the text element placed outside of
+        the SVG root and it has no renderer(). Later attempts to use the
+        renderer in animatedLocalTransform fail.
+
+        Test: svg/custom/get-text-element-transform-crash.html
+
+        * svg/SVGTextElement.cpp:
+        (WebCore::SVGTextElement::animatedLocalTransform): Added a check for null renderer, and do not check
+        for style transform if there is no renderer.
+
 2012-03-27  Nikolas Zimmermann  <nzimmermann@rim.com>
 
         Enable animVal support for SVGAnimatedPreserveAspectRatio
index cc8b674..91d3144 100644 (file)
@@ -110,10 +110,10 @@ AffineTransform SVGTextElement::getScreenCTM(StyleUpdateStrategy styleUpdateStra
 AffineTransform SVGTextElement::animatedLocalTransform() const
 {
     AffineTransform matrix;
-    RenderStyle* style = renderer()->style();
+    RenderStyle* style = renderer() ? renderer()->style() : 0;
 
     // if CSS property was set, use that, otherwise fallback to attribute (if set)
-    if (style->hasTransform()) {
+    if (style && style->hasTransform()) {
         TransformationMatrix t;
         // For now, the transform-origin is not taken into account
         // Also, any percentage values will not be taken into account