<!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>[187525] 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/187525">187525</a></dd>
<dt>Author</dt> <dd>mmaxfield@apple.com</dd>
<dt>Date</dt> <dd>2015-07-28 16:12:46 -0700 (Tue, 28 Jul 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[iOS] Crash when encountering characters whose natural font is one we can't look up
https://bugs.webkit.org/show_bug.cgi?id=147377
&lt;rdar://problem/22022011&gt;

Reviewed by Simon Fraser.

Source/WebCore:

These characters hit the complex text code path, where CoreText picks fonts
to use for each character. We then try to map these CoreText fonts back to
our own Font objects, and we assume (on iOS) that our own font search will
always return something.

On OS X, we do not have such an assumption, and we handle the case where it
does not hold. This method works on iOS as well, so the solution is to just
perform it on both OSes.

Test: fast/text/crash-complex-unknown-font.html

* platform/graphics/mac/ComplexTextControllerCoreText.mm:
(WebCore::ComplexTextController::collectComplexTextRunsForCharacters):

LayoutTests:

* fast/text/crash-complex-unknown-font-expected.html: Added.
* fast/text/crash-complex-unknown-font.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsmacComplexTextControllerCoreTextmm">trunk/Source/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfasttextcrashcomplexunknownfontexpectedhtml">trunk/LayoutTests/fast/text/crash-complex-unknown-font-expected.html</a></li>
<li><a href="#trunkLayoutTestsfasttextcrashcomplexunknownfonthtml">trunk/LayoutTests/fast/text/crash-complex-unknown-font.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (187524 => 187525)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-07-28 22:39:12 UTC (rev 187524)
+++ trunk/LayoutTests/ChangeLog        2015-07-28 23:12:46 UTC (rev 187525)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2015-07-28  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        [iOS] Crash when encountering characters whose natural font is one we can't look up
+        https://bugs.webkit.org/show_bug.cgi?id=147377
+        &lt;rdar://problem/22022011&gt;
+
+        Reviewed by Simon Fraser.
+
+        * fast/text/crash-complex-unknown-font-expected.html: Added.
+        * fast/text/crash-complex-unknown-font.html: Added.
+
</ins><span class="cx"> 2015-07-28  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Tests introduced in r187489 are flaky
</span></span></pre></div>
<a id="trunkLayoutTestsfasttextcrashcomplexunknownfontexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/text/crash-complex-unknown-font-expected.html (0 => 187525)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/crash-complex-unknown-font-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/text/crash-complex-unknown-font-expected.html        2015-07-28 23:12:46 UTC (rev 187525)
</span><span class="lines">@@ -0,0 +1,8 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;/head&gt;
+&lt;body&gt;
+Test successful (no crash)
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfasttextcrashcomplexunknownfonthtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/text/crash-complex-unknown-font.html (0 => 187525)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/crash-complex-unknown-font.html                                (rev 0)
+++ trunk/LayoutTests/fast/text/crash-complex-unknown-font.html        2015-07-28 23:12:46 UTC (rev 187525)
</span><span class="lines">@@ -0,0 +1,17 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;script&gt;
+if (window.testRunner)
+    testRunner.waitUntilDone();
+window.setTimeout(function() {
+    document.getElementById(&quot;replaceme&quot;).textContent = &quot;Test successful (no crash)&quot;;
+    if (window.testRunner)
+        testRunner.notifyDone();
+}, 0);
+&lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+&lt;div id=&quot;replaceme&quot;&gt;&amp;#x2038;&amp;#x094d;&amp;#x091f;&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 (187524 => 187525)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-07-28 22:39:12 UTC (rev 187524)
+++ trunk/Source/WebCore/ChangeLog        2015-07-28 23:12:46 UTC (rev 187525)
</span><span class="lines">@@ -1,3 +1,25 @@
</span><ins>+2015-07-28  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        [iOS] Crash when encountering characters whose natural font is one we can't look up
+        https://bugs.webkit.org/show_bug.cgi?id=147377
+        &lt;rdar://problem/22022011&gt;
+
+        Reviewed by Simon Fraser.
+
+        These characters hit the complex text code path, where CoreText picks fonts
+        to use for each character. We then try to map these CoreText fonts back to
+        our own Font objects, and we assume (on iOS) that our own font search will
+        always return something.
+
+        On OS X, we do not have such an assumption, and we handle the case where it
+        does not hold. This method works on iOS as well, so the solution is to just
+        perform it on both OSes.
+
+        Test: fast/text/crash-complex-unknown-font.html
+
+        * platform/graphics/mac/ComplexTextControllerCoreText.mm:
+        (WebCore::ComplexTextController::collectComplexTextRunsForCharacters):
+
</ins><span class="cx"> 2015-07-28  Said Abou-Hallawa  &lt;sabouhallawa@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [iOS] REGRESSION(r168075): Fullscreen web video doesn't pause on screen lock
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsmacComplexTextControllerCoreTextmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.mm (187524 => 187525)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.mm        2015-07-28 22:39:12 UTC (rev 187524)
+++ trunk/Source/WebCore/platform/graphics/mac/ComplexTextControllerCoreText.mm        2015-07-28 23:12:46 UTC (rev 187525)
</span><span class="lines">@@ -282,17 +282,12 @@
</span><span class="cx">                     }
</span><span class="cx">                     auto&amp; fontCache = FontCache::singleton();
</span><span class="cx">                     runFont = fontCache.fontForFamily(m_font.fontDescription(), fontName.get(), false).get();
</span><del>-#if !PLATFORM(IOS)
-                    // Core Text may have used a font that is not known to NSFontManager. In that case, fall back on
-                    // using the font as returned, even though it may not have the best NSFontRenderingMode.
</del><ins>+                    // Core Text may have used a font that our font lookup path cannot find. In that case, fall back on
+                    // using the font as returned.
</ins><span class="cx">                     if (!runFont) {
</span><span class="cx">                         FontPlatformData runFontPlatformData(runCTFont, CTFontGetSize(runCTFont));
</span><span class="cx">                         runFont = fontCache.fontForPlatformData(runFontPlatformData).ptr();
</span><span class="cx">                     }
</span><del>-#else
-                    // FIXME: Just assert for now, until we can devise a better fix that works with iOS.
-                    ASSERT(runFont);
-#endif
</del><span class="cx">                 }
</span><span class="cx">                 if (m_fallbackFonts &amp;&amp; runFont != &amp;m_font.primaryFont())
</span><span class="cx">                     m_fallbackFonts-&gt;add(runFont);
</span></span></pre>
</div>
</div>

</body>
</html>