<!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>[190891] 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/190891">190891</a></dd>
<dt>Author</dt> <dd>mmaxfield@apple.com</dd>
<dt>Date</dt> <dd>2015-10-12 15:08:27 -0700 (Mon, 12 Oct 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>REGRESSION(<a href="http://trac.webkit.org/projects/webkit/changeset/182192">r182192</a>): Ligatures do not interact correctly with SHY in some fonts
https://bugs.webkit.org/show_bug.cgi?id=150006

Reviewed by Simon Fraser.

Source/WebCore:

When performing font transforms and we encounter kCGFontIndexInvalid, we filter it out of the
GlyphBuffer. However, this filter was only interacting with part of the GlyphBuffer instead
of the whole thing. This causes glyph IDs from one font to be rendered with other fonts,
thereby showing garbage glyphs.

However, now that &lt;rdar://problem/20230073&gt; is fixed, we don't need to perform this filter in
the first place.

Test: fast/text/undefined-glyph-with-ligature.html

* platform/graphics/GlyphBuffer.h:
(WebCore::GlyphBuffer::copyItem):
(WebCore::GlyphBuffer::swap):
* platform/graphics/WidthIterator.cpp:
(WebCore::WidthIterator::applyFontTransforms):

LayoutTests:

* fast/text/resources/tiny-ligature-font.svg: Added.
* fast/text/undefined-glyph-with-ligature-expected.html: Added.
* fast/text/undefined-glyph-with-ligature.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="#trunkSourceWebCoreplatformgraphicsWidthIteratorcpp">trunk/Source/WebCore/platform/graphics/WidthIterator.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsfasttextresourcestinyligaturefontsvg">trunk/LayoutTests/fast/text/resources/tiny-ligature-font.svg</a></li>
<li><a href="#trunkLayoutTestsfasttextundefinedglyphwithligatureexpectedhtml">trunk/LayoutTests/fast/text/undefined-glyph-with-ligature-expected.html</a></li>
<li><a href="#trunkLayoutTestsfasttextundefinedglyphwithligaturehtml">trunk/LayoutTests/fast/text/undefined-glyph-with-ligature.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (190890 => 190891)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-10-12 21:48:32 UTC (rev 190890)
+++ trunk/LayoutTests/ChangeLog        2015-10-12 22:08:27 UTC (rev 190891)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2015-10-12  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        REGRESSION(r182192): Ligatures do not interact correctly with SHY in some fonts
+        https://bugs.webkit.org/show_bug.cgi?id=150006
+
+        Reviewed by Simon Fraser.
+
+        * fast/text/resources/tiny-ligature-font.svg: Added.
+        * fast/text/undefined-glyph-with-ligature-expected.html: Added.
+        * fast/text/undefined-glyph-with-ligature.html: Added.
+
</ins><span class="cx"> 2015-10-12  Antoine Quint  &lt;graouts@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [SVG] Handle endEvent for svg animations
</span></span></pre></div>
<a id="trunkLayoutTestsfasttextresourcestinyligaturefontsvg"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/text/resources/tiny-ligature-font.svg (0 => 190891)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/resources/tiny-ligature-font.svg                                (rev 0)
+++ trunk/LayoutTests/fast/text/resources/tiny-ligature-font.svg        2015-10-12 22:08:27 UTC (rev 190891)
</span><span class="lines">@@ -0,0 +1,13 @@
</span><ins>+&lt;?xml version=&quot;1.0&quot; standalone=&quot;yes&quot;?&gt;
+&lt;svg  version=&quot;1.1&quot; viewBox=&quot;0 0 160 160&quot; xmlns = 'http://www.w3.org/2000/svg' xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
+  &lt;defs&gt;
+    &lt;font id=&quot;Litherum&quot; horiz-adv-x=&quot;1000&quot;&gt;
+      &lt;font-face units-per-em=&quot;1000&quot; ascent=&quot;1000&quot; descent=&quot;0&quot;&gt;
+      &lt;/font-face&gt;
+    &lt;glyph unicode=&quot;A&quot; horiz-adv-x=&quot;1000&quot; d=&quot;M 500 0 H 1000 V 600 H 500 z&quot;/&gt;
+    &lt;glyph unicode=&quot;B&quot; horiz-adv-x=&quot;1000&quot; d=&quot;M 500 0 H 1000 V 600 H 500 z&quot;/&gt;
+    &lt;glyph unicode=&quot;AB&quot; horiz-adv-x=&quot;1000&quot; d=&quot;M 500 0 H 1000 V 600 H 500 z&quot;/&gt;
+    &lt;glyph unicode=&quot; B&quot; horiz-adv-x=&quot;1000&quot; d=&quot;M 500 0 H 1000 V 600 H 500 z&quot;/&gt;
+    &lt;/font&gt;
+  &lt;/defs&gt;
+&lt;/svg&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfasttextundefinedglyphwithligatureexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/text/undefined-glyph-with-ligature-expected.html (0 => 190891)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/undefined-glyph-with-ligature-expected.html                                (rev 0)
+++ trunk/LayoutTests/fast/text/undefined-glyph-with-ligature-expected.html        2015-10-12 22:08:27 UTC (rev 190891)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+@font-face {
+    font-family: Litherum;
+    src: url(&quot;resources/tiny-ligature-font.svg&quot;) format(&quot;svg&quot;);
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+This test makes sure that the combination of ligatures and nonexistant glyphs do not cause arbitrary glyphs to be rendered.
+The test passes if you see two black rectangles below, and nothing else.
+&lt;div style=&quot;font-family: Litherum;&quot;&gt;ABA&lt;/div&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestsfasttextundefinedglyphwithligaturehtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/fast/text/undefined-glyph-with-ligature.html (0 => 190891)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/fast/text/undefined-glyph-with-ligature.html                                (rev 0)
+++ trunk/LayoutTests/fast/text/undefined-glyph-with-ligature.html        2015-10-12 22:08:27 UTC (rev 190891)
</span><span class="lines">@@ -0,0 +1,16 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+&lt;html&gt;
+&lt;head&gt;
+&lt;style&gt;
+@font-face {
+    font-family: Litherum;
+    src: url(&quot;resources/tiny-ligature-font.svg&quot;) format(&quot;svg&quot;);
+}
+&lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+This test makes sure that the combination of ligatures and nonexistant glyphs do not cause arbitrary glyphs to be rendered.
+The test passes if you see two black rectangles below, and nothing else.
+&lt;div style=&quot;font-family: Litherum;&quot;&gt;AB&amp;shy;A&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 (190890 => 190891)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-10-12 21:48:32 UTC (rev 190890)
+++ trunk/Source/WebCore/ChangeLog        2015-10-12 22:08:27 UTC (rev 190891)
</span><span class="lines">@@ -1,3 +1,26 @@
</span><ins>+2015-10-12  Myles C. Maxfield  &lt;mmaxfield@apple.com&gt;
+
+        REGRESSION(r182192): Ligatures do not interact correctly with SHY in some fonts
+        https://bugs.webkit.org/show_bug.cgi?id=150006
+
+        Reviewed by Simon Fraser.
+
+        When performing font transforms and we encounter kCGFontIndexInvalid, we filter it out of the
+        GlyphBuffer. However, this filter was only interacting with part of the GlyphBuffer instead
+        of the whole thing. This causes glyph IDs from one font to be rendered with other fonts,
+        thereby showing garbage glyphs.
+
+        However, now that &lt;rdar://problem/20230073&gt; is fixed, we don't need to perform this filter in
+        the first place.
+
+        Test: fast/text/undefined-glyph-with-ligature.html
+
+        * platform/graphics/GlyphBuffer.h:
+        (WebCore::GlyphBuffer::copyItem):
+        (WebCore::GlyphBuffer::swap):
+        * platform/graphics/WidthIterator.cpp:
+        (WebCore::WidthIterator::applyFontTransforms):
+
</ins><span class="cx"> 2015-10-12  Antoine Quint  &lt;graouts@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [SVG] Handle endEvent for svg animations
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsWidthIteratorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/WidthIterator.cpp (190890 => 190891)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/WidthIterator.cpp        2015-10-12 21:48:32 UTC (rev 190890)
+++ trunk/Source/WebCore/platform/graphics/WidthIterator.cpp        2015-10-12 22:08:27 UTC (rev 190891)
</span><span class="lines">@@ -155,19 +155,6 @@
</span><span class="cx">     }
</span><span class="cx">     charactersTreatedAsSpace.clear();
</span><span class="cx"> 
</span><del>-#if PLATFORM(MAC) || PLATFORM(IOS)
-    // Workaround for &lt;rdar://problem/20230073&gt; FIXME: Please remove this when no longer needed.
-    GlyphBufferGlyph* glyphs = glyphBuffer-&gt;glyphs(0);
-    int filteredIndex = lastGlyphCount;
-    for (int i = lastGlyphCount; i &lt; glyphBufferSize; ++i) {
-        glyphs[filteredIndex] = glyphs[i];
-        advances[filteredIndex] = advances[i];
-        if (glyphs[filteredIndex] != kCGFontIndexInvalid)
-            ++filteredIndex;
-    }
-    glyphBufferSize = filteredIndex;
-#endif
-
</del><span class="cx">     for (int i = lastGlyphCount; i &lt; glyphBufferSize; ++i)
</span><span class="cx">         widthDifference += advances[i].width();
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>