<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[171561] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/171561">171561</a></dd>
<dt>Author</dt> <dd>mmaxfield@apple.com</dd>
<dt>Date</dt> <dd>2014-07-24 17:27:09 -0700 (Thu, 24 Jul 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Crash when measuring a glyphs from a fallback SVG font
https://bugs.webkit.org/show_bug.cgi?id=135264

Reviewed by Simon Fraser.

Source/WebCore:
We can't realize font data for all fallback fonts ahead
of time, but we don't have all the necessary context to
realize SVG fallback data when it's needed. For now, we
can just bail; however, a larger, more invasive fix is
in order.

Test: svg/text/svg-fallback-font-crash.html

* platform/graphics/WidthIterator.cpp:
(WebCore::applyFontTransforms):

LayoutTests:
Render some text with a fallback SVG Font including a glyph which
only exists in that fallback font. Make sure there is no crash.

* svg/text/resources/Litherum.svg:
* svg/text/svg-fallback-font-crash-expected.txt: Added.
* svg/text/svg-fallback-font-crash.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestssvgtextresourcesLitherumsvg">trunk/LayoutTests/svg/text/resources/Litherum.svg</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsWidthIteratorcpp">trunk/Source/WebCore/platform/graphics/WidthIterator.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestssvgtextsvgfallbackfontcrashexpectedtxt">trunk/LayoutTests/svg/text/svg-fallback-font-crash-expected.txt</a></li>
<li><a href="#trunkLayoutTestssvgtextsvgfallbackfontcrashhtml">trunk/LayoutTests/svg/text/svg-fallback-font-crash.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (171560 => 171561)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-07-25 00:24:56 UTC (rev 171560)
+++ trunk/LayoutTests/ChangeLog        2014-07-25 00:27:09 UTC (rev 171561)
</span><span class="lines">@@ -1,3 +1,17 @@
</span><ins>+2014-07-24  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        Crash when measuring a glyphs from a fallback SVG font
+        https://bugs.webkit.org/show_bug.cgi?id=135264
+
+        Reviewed by Simon Fraser.
+
+        Render some text with a fallback SVG Font including a glyph which
+        only exists in that fallback font. Make sure there is no crash.
+
+        * svg/text/resources/Litherum.svg:
+        * svg/text/svg-fallback-font-crash-expected.txt: Added.
+        * svg/text/svg-fallback-font-crash.html: Added.
+
</ins><span class="cx"> 2014-07-24  Mihnea Ovidenie  &lt;mihnea@adobe.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [New Multicolumn] Assertion failure when an input element has multicolumn style
</span></span></pre></div>
<a id="trunkLayoutTestssvgtextresourcesLitherumsvg"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/svg/text/resources/Litherum.svg (171560 => 171561)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/text/resources/Litherum.svg        2014-07-25 00:24:56 UTC (rev 171560)
+++ trunk/LayoutTests/svg/text/resources/Litherum.svg        2014-07-25 00:27:09 UTC (rev 171561)
</span><span class="lines">@@ -6,6 +6,7 @@
</span><span class="cx"> &lt;font id=&quot;Litherum&quot; horiz-adv-x=&quot;1024&quot;&gt;
</span><span class="cx"> &lt;font-face units-per-em=&quot;14&quot; ascent=&quot;14&quot; descent=&quot;-7&quot;/&gt;
</span><span class="cx"> &lt;glyph unicode=&quot;|&quot; horiz-adv-x=&quot;14&quot; d=&quot;M5 -7v21h4v-21z&quot;/&gt;
</span><ins>+&lt;glyph unicode=&quot;&amp;#x20001;&quot; horiz-adv-x=&quot;14&quot; d=&quot;M5 -7v21h4v-21z&quot;/&gt;
</ins><span class="cx"> &lt;/font&gt;
</span><span class="cx"> &lt;/defs&gt;
</span><span class="cx"> &lt;/svg&gt;
</span></span></pre></div>
<a id="trunkLayoutTestssvgtextsvgfallbackfontcrashexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/text/svg-fallback-font-crash-expected.txt (0 => 171561)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/text/svg-fallback-font-crash-expected.txt                                (rev 0)
+++ trunk/LayoutTests/svg/text/svg-fallback-font-crash-expected.txt        2014-07-25 00:27:09 UTC (rev 171561)
</span><span class="lines">@@ -0,0 +1,2 @@
</span><ins>+This test makes sure that there is no crash if a character is rendered with a SVG fallback font. The test is successful if there is no crash.
+This is a foreign character. 𠀁 That was a foreign character.
</ins></span></pre></div>
<a id="trunkLayoutTestssvgtextsvgfallbackfontcrashhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/svg/text/svg-fallback-font-crash.html (0 => 171561)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/svg/text/svg-fallback-font-crash.html                                (rev 0)
+++ trunk/LayoutTests/svg/text/svg-fallback-font-crash.html        2014-07-25 00:27:09 UTC (rev 171561)
</span><span class="lines">@@ -0,0 +1,19 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+@font-face {
+    font-family: 'Litherum';
+    src: url(&quot;./resources/Litherum.svg&quot;) format(svg)
+}
+&lt;/style&gt;
+&lt;script&gt;
+if (window.testRunner)
+    testRunner.dumpAsText();
+&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+This test makes sure that there is no crash if a character is rendered with a SVG fallback font. The test is successful if there is no crash.
+&lt;div style=&quot;font-family: 'Helvetica' 'Litherum';&quot;&gt;This is a foreign character. &amp;#x20001; That was a foreign character.&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (171560 => 171561)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-07-25 00:24:56 UTC (rev 171560)
+++ trunk/Source/WebCore/ChangeLog        2014-07-25 00:27:09 UTC (rev 171561)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2014-07-24  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        Crash when measuring a glyphs from a fallback SVG font
+        https://bugs.webkit.org/show_bug.cgi?id=135264
+
+        Reviewed by Simon Fraser.
+
+        We can't realize font data for all fallback fonts ahead
+        of time, but we don't have all the necessary context to
+        realize SVG fallback data when it's needed. For now, we
+        can just bail; however, a larger, more invasive fix is
+        in order.
+
+        Test: svg/text/svg-fallback-font-crash.html
+
+        * platform/graphics/WidthIterator.cpp:
+        (WebCore::applyFontTransforms):
+
</ins><span class="cx"> 2014-07-24  Daniel Bates  &lt;dabates@apple.com&gt;
</span><span class="cx">             And Alexey Proskuryakov  &lt;ap@apple.com&gt;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsWidthIteratorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/WidthIterator.cpp (171560 => 171561)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/WidthIterator.cpp        2014-07-25 00:24:56 UTC (rev 171560)
+++ trunk/Source/WebCore/platform/graphics/WidthIterator.cpp        2014-07-25 00:27:09 UTC (rev 171561)
</span><span class="lines">@@ -123,10 +123,12 @@
</span><span class="cx"> #else
</span><span class="cx">     // We need to handle transforms on SVG fonts internally, since they are rendered internally.
</span><span class="cx">     if (fontData-&gt;isSVGFont()) {
</span><del>-        ASSERT(iterator.run().renderingContext());
</del><span class="cx">         // SVG font ligatures are handled during glyph selection, only kerning remaining.
</span><del>-        if (typesettingFeatures &amp; Kerning)
</del><ins>+        if (iterator.run().renderingContext() &amp;&amp; (typesettingFeatures &amp; Kerning)) {
+            // FIXME: We could pass the necessary context down to this level so we can lazily create rendering contexts at this point.
+            // However, a larger refactoring of SVG fonts might necessary to sidestep this problem completely.
</ins><span class="cx">             iterator.run().renderingContext()-&gt;applySVGKerning(fontData, iterator, glyphBuffer, lastGlyphCount);
</span><ins>+        }
</ins><span class="cx">     } else
</span><span class="cx"> #endif
</span><span class="cx">         fontData-&gt;applyTransforms(glyphBuffer-&gt;glyphs(lastGlyphCount), advances + lastGlyphCount, glyphBufferSize - lastGlyphCount, typesettingFeatures);
</span></span></pre>
</div>
</div>

</body>
</html>