<!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>[176607] 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/176607">176607</a></dd>
<dt>Author</dt> <dd>mmaxfield@apple.com</dd>
<dt>Date</dt> <dd>2014-12-01 15:54:51 -0800 (Mon, 01 Dec 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Crash in Font::dashesForIntersectionsWithRect() due to underlining SVG fonts
https://bugs.webkit.org/show_bug.cgi?id=139158

Reviewed by Simon Fraser.

Source/WebCore:

RenderingContexts are only created if the primary SimpleFontData is an SVG font,
but dashesForIntersectionWithRect() uses the first character's SimpleFontData.
One might be an SVG font but the other might not be.

Note that this brittle design will be fixed with the SVG -&gt; OTF translator.

Test: fast/css3-text/css3-text-decoration/text-decoration-skip/decoration-skip-crash-fallback-svg.html

* platform/graphics/mac/FontMac.mm:
(WebCore::Font::dashesForIntersectionsWithRect):

LayoutTests:

Test for no crashes when the primary SimpleFontData and the first character's
SimpleFontData differ in their SVG-ness.

* fast/css3-text/css3-text-decoration/text-decoration-skip/decoration-skip-crash-fallback-svg-expected.html: Added.
* fast/css3-text/css3-text-decoration/text-decoration-skip/decoration-skip-crash-fallback-svg.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsfastcss3textcss3textdecorationtextdecorationskipresourcesLitherumsvg">trunk/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip/resources/Litherum.svg</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsmacFontMacmm">trunk/Source/WebCore/platform/graphics/mac/FontMac.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfastcss3textcss3textdecorationtextdecorationskipdecorationskipcrashfallbacksvgexpectedhtml">trunk/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip/decoration-skip-crash-fallback-svg-expected.html</a></li>
<li><a href="#trunkLayoutTestsfastcss3textcss3textdecorationtextdecorationskipdecorationskipcrashfallbacksvghtml">trunk/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip/decoration-skip-crash-fallback-svg.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (176606 => 176607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-12-01 23:40:09 UTC (rev 176606)
+++ trunk/LayoutTests/ChangeLog        2014-12-01 23:54:51 UTC (rev 176607)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2014-12-01  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        Crash in Font::dashesForIntersectionsWithRect() due to underlining SVG fonts
+        https://bugs.webkit.org/show_bug.cgi?id=139158
+
+        Reviewed by Simon Fraser.
+
+        Test for no crashes when the primary SimpleFontData and the first character's
+        SimpleFontData differ in their SVG-ness.
+
+        * fast/css3-text/css3-text-decoration/text-decoration-skip/decoration-skip-crash-fallback-svg-expected.html: Added.
+        * fast/css3-text/css3-text-decoration/text-decoration-skip/decoration-skip-crash-fallback-svg.html: Added.
+
</ins><span class="cx"> 2014-12-01  Daniel Bates  &lt;dabates@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [iOS] Update expected results for LayoutTests/crypto
</span></span></pre></div>
<a id="trunkLayoutTestsfastcss3textcss3textdecorationtextdecorationskipdecorationskipcrashfallbacksvgexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip/decoration-skip-crash-fallback-svg-expected.html (0 => 176607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip/decoration-skip-crash-fallback-svg-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip/decoration-skip-crash-fallback-svg-expected.html        2014-12-01 23:54:51 UTC (rev 176607)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;meta charset=&quot;utf-8&quot;&gt;
+&lt;style&gt;
+@font-face {
+    font-family: 'Litherum';
+    src: url(&quot;./resources/Litherum.svg&quot;) format(svg)
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+This test makes sure that drawing underlined text doesn't crash when the primary SimpleFontData
+is not an SVG font but the first drawn character's SimpleFontData is an SVG font.
+&lt;div style=&quot;font-family: Litherum; text-decoration: underline;&quot;&gt;事&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcss3textcss3textdecorationtextdecorationskipdecorationskipcrashfallbacksvghtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip/decoration-skip-crash-fallback-svg.html (0 => 176607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip/decoration-skip-crash-fallback-svg.html                                (rev 0)
+++ trunk/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip/decoration-skip-crash-fallback-svg.html        2014-12-01 23:54:51 UTC (rev 176607)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;meta charset=&quot;utf-8&quot;&gt;
+&lt;style&gt;
+@font-face {
+    font-family: 'Litherum';
+    src: url(&quot;./resources/Litherum.svg&quot;) format(svg)
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+This test makes sure that drawing underlined text doesn't crash when the primary SimpleFontData
+is not an SVG font but the first drawn character's SimpleFontData is an SVG font.
+&lt;div style=&quot;font-family: Arial, Litherum; text-decoration: underline;&quot;&gt;事&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfastcss3textcss3textdecorationtextdecorationskipresourcesLitherumsvg"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip/resources/Litherum.svg (176606 => 176607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip/resources/Litherum.svg        2014-12-01 23:40:09 UTC (rev 176606)
+++ trunk/LayoutTests/fast/css3-text/css3-text-decoration/text-decoration-skip/resources/Litherum.svg        2014-12-01 23:54:51 UTC (rev 176607)
</span><span class="lines">@@ -16,6 +16,7 @@
</span><span class="cx"> &lt;glyph unicode=&quot;일&quot; horiz-adv-x=&quot;56&quot; d=&quot;M20 -28v84h16v-84z&quot;/&gt;
</span><span class="cx"> &lt;glyph unicode=&quot;서&quot; horiz-adv-x=&quot;56&quot; d=&quot;M20 -28v84h16v-84z&quot;/&gt;
</span><span class="cx"> &lt;glyph unicode=&quot;공&quot; horiz-adv-x=&quot;56&quot; d=&quot;M20 -28v84h16v-84z&quot;/&gt;
</span><ins>+&lt;glyph unicode=&quot;事&quot; horiz-adv-x=&quot;56&quot; d=&quot;M20 -28&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="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (176606 => 176607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-12-01 23:40:09 UTC (rev 176606)
+++ trunk/Source/WebCore/ChangeLog        2014-12-01 23:54:51 UTC (rev 176607)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2014-12-01  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        Crash in Font::dashesForIntersectionsWithRect() due to underlining SVG fonts
+        https://bugs.webkit.org/show_bug.cgi?id=139158
+
+        Reviewed by Simon Fraser.
+
+        RenderingContexts are only created if the primary SimpleFontData is an SVG font,
+        but dashesForIntersectionWithRect() uses the first character's SimpleFontData.
+        One might be an SVG font but the other might not be.
+
+        Note that this brittle design will be fixed with the SVG -&gt; OTF translator.
+
+        Test: fast/css3-text/css3-text-decoration/text-decoration-skip/decoration-skip-crash-fallback-svg.html
+
+        * platform/graphics/mac/FontMac.mm:
+        (WebCore::Font::dashesForIntersectionsWithRect):
+
</ins><span class="cx"> 2014-12-01  Bartlomiej Gajda  &lt;b.gajda@samsung.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [MSE] Fix not always calling mediaPlayer seek.
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsmacFontMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/mac/FontMac.mm (176606 => 176607)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/mac/FontMac.mm        2014-12-01 23:40:09 UTC (rev 176606)
+++ trunk/Source/WebCore/platform/graphics/mac/FontMac.mm        2014-12-01 23:54:51 UTC (rev 176607)
</span><span class="lines">@@ -548,7 +548,10 @@
</span><span class="cx">     if (!fontData-&gt;isSVGFont())
</span><span class="cx">         translator = std::make_unique&lt;MacGlyphToPathTranslator&gt;(run, glyphBuffer, origin);
</span><span class="cx">     else {
</span><del>-        translator = run.renderingContext()-&gt;createGlyphToPathTranslator(*fontData, &amp;run, glyphBuffer, 0, glyphBuffer.size(), origin);
</del><ins>+        TextRun::RenderingContext* renderingContext = run.renderingContext();
+        if (!renderingContext)
+            return DashArray();
+        translator = renderingContext-&gt;createGlyphToPathTranslator(*fontData, &amp;run, glyphBuffer, 0, glyphBuffer.size(), origin);
</ins><span class="cx">         isSVG = true;
</span><span class="cx">     }
</span><span class="cx">     DashArray result;
</span></span></pre>
</div>
</div>

</body>
</html>