<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>157132</bug_id>
          
          <creation_ts>2016-04-28 05:35:50 -0700</creation_ts>
          <short_desc>[FreeType] ASSERTION FAILED: !lookupForWriting(Extractor::extract(entry)).second in FontCache::getVerticalData()</short_desc>
          <delta_ts>2016-04-29 03:40:41 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk, LayoutTestFailure</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>darin</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>mrobinson</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1188213</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-04-28 05:35:50 -0700</bug_when>
    <thetext>I&apos;ve noticed that some tests fail randomly in the GTK+ debug bot due to an assertion in HashMap when getting vertical data from the FontCache. I don&apos;t know exactly what&apos;s wrong, but looks alike a problem with the FontVerticalDataCache hash traits implementation. Looking at the code, I&apos;ve realized that we could simplify everything by reusing the FontDataCache hash and traits, since we are actually using the FontPlatformData::hash() in the end in both cases. Also, I don&apos;t see why we need to get the vertical data from the FontPlatformData while it&apos;s actually cached by the font cache. We could just using the FontCache directly passing only the FontPlatformData. These changes seem to fix the crashes and make the code a lot simpler.

See the full bt:

STDERR: ASSERTION FAILED: !lookupForWriting(Extractor::extract(entry)).second
STDERR: ../../Source/WTF/wtf/HashTable.h(985) : WTF::HashTable&lt;Key, Value, Extractor, HashFunctions, Traits, KeyTraits&gt;::ValueType* WTF::HashTable&lt;Key, Value, Extractor, HashFunctions, Traits, KeyTraits&gt;::reinsert(WTF::HashTable&lt;Key, Value, Extractor, HashFunctions, Traits, KeyTraits&gt;::ValueType&amp;&amp;) [with Key = WTF::AtomicString; Value = WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt;; Extractor = WTF::KeyValuePairKeyExtractor&lt;WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;; HashFunctions = WebCore::FontVerticalDataCacheKeyHash; Traits = WTF::HashMap&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;, WebCore::FontVerticalDataCacheKeyHash, WebCore::FontVerticalDataCacheKeyTraits&gt;::KeyValuePairTraits; KeyTraits = WebCore::FontVerticalDataCacheKeyTraits; WTF::HashTable&lt;Key, Value, Extractor, HashFunctions, Traits, KeyTraits&gt;::ValueType = WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt;]
STDERR: 1   0x7fbc12a27fcd /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libjavascriptcoregtk-4.0.so.18(WTFCrash+0x1e) [0x7fbc12a27fcd]
STDERR: 2   0x7fbc19e2b07f /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WTF::HashTable&lt;WTF::AtomicString, WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt;, WTF::KeyValuePairKeyExtractor&lt;WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;, WebCore::FontVerticalDataCacheKeyHash, WTF::HashMap&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;, WebCore::FontVerticalDataCacheKeyHash, WebCore::FontVerticalDataCacheKeyTraits, WTF::HashTraits&lt;WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;::KeyValuePairTraits, WebCore::FontVerticalDataCacheKeyTraits&gt;::reinsert(WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt;&amp;&amp;)+0x89) [0x7fbc19e2b07f]
STDERR: 3   0x7fbc19e2a2b5 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WTF::HashTable&lt;WTF::AtomicString, WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt;, WTF::KeyValuePairKeyExtractor&lt;WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;, WebCore::FontVerticalDataCacheKeyHash, WTF::HashMap&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;, WebCore::FontVerticalDataCacheKeyHash, WebCore::FontVerticalDataCacheKeyTraits, WTF::HashTraits&lt;WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;::KeyValuePairTraits, WebCore::FontVerticalDataCacheKeyTraits&gt;::rehash(unsigned int, WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt;*)+0xf1) [0x7fbc19e2a2b5]
STDERR: 4   0x7fbc19e28cad /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WTF::HashTable&lt;WTF::AtomicString, WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt;, WTF::KeyValuePairKeyExtractor&lt;WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;, WebCore::FontVerticalDataCacheKeyHash, WTF::HashMap&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;, WebCore::FontVerticalDataCacheKeyHash, WebCore::FontVerticalDataCacheKeyTraits, WTF::HashTraits&lt;WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;::KeyValuePairTraits, WebCore::FontVerticalDataCacheKeyTraits&gt;::expand(WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt;*)+0x61) [0x7fbc19e28cad]
STDERR: 5   0x7fbc19e27268 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WTF::HashTableAddResult&lt;WTF::HashTableIterator&lt;WTF::AtomicString, WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt;, WTF::KeyValuePairKeyExtractor&lt;WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;, WebCore::FontVerticalDataCacheKeyHash, WTF::HashMap&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;, WebCore::FontVerticalDataCacheKeyHash, WebCore::FontVerticalDataCacheKeyTraits, WTF::HashTraits&lt;WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;::KeyValuePairTraits, WebCore::FontVerticalDataCacheKeyTraits&gt; &gt; WTF::HashTable&lt;WTF::AtomicString, WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt;, WTF::KeyValuePairKeyExtractor&lt;WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;, WebCore::FontVerticalDataCacheKeyHash, WTF::HashMap&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;, WebCore::FontVerticalDataCacheKeyHash, WebCore::FontVerticalDataCacheKeyTraits, WTF::HashTraits&lt;WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;::KeyValuePairTraits, WebCore::FontVerticalDataCacheKeyTraits&gt;::add&lt;WTF::HashMapTranslator&lt;WTF::HashMap&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;, WebCore::FontVerticalDataCacheKeyHash, WebCore::FontVerticalDataCacheKeyTraits, WTF::HashTraits&lt;WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;::KeyValuePairTraits, WebCore::FontVerticalDataCacheKeyHash&gt;, WTF::AtomicString const&amp;, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;&amp;&gt;(WTF::AtomicString const&amp;, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;&amp;)+0x27c) [0x7fbc19e27268]
STDERR: 6   0x7fbc19e24d26 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WTF::HashTableAddResult&lt;WTF::HashTableIterator&lt;WTF::AtomicString, WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt;, WTF::KeyValuePairKeyExtractor&lt;WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;, WebCore::FontVerticalDataCacheKeyHash, WTF::HashMap&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;, WebCore::FontVerticalDataCacheKeyHash, WebCore::FontVerticalDataCacheKeyTraits, WTF::HashTraits&lt;WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;::KeyValuePairTraits, WebCore::FontVerticalDataCacheKeyTraits&gt; &gt; WTF::HashMap&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;, WebCore::FontVerticalDataCacheKeyHash, WebCore::FontVerticalDataCacheKeyTraits, WTF::HashTraits&lt;WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;::inlineAdd&lt;WTF::AtomicString const&amp;, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;&amp;&gt;(WTF::AtomicString const&amp;, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;&amp;)+0x4a) [0x7fbc19e24d26]
STDERR: 7   0x7fbc19e22836 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WTF::HashTableAddResult&lt;WTF::HashTableIterator&lt;WTF::AtomicString, WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt;, WTF::KeyValuePairKeyExtractor&lt;WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;, WebCore::FontVerticalDataCacheKeyHash, WTF::HashMap&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;, WebCore::FontVerticalDataCacheKeyHash, WebCore::FontVerticalDataCacheKeyTraits, WTF::HashTraits&lt;WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;::KeyValuePairTraits, WebCore::FontVerticalDataCacheKeyTraits&gt; &gt; WTF::HashMap&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;, WebCore::FontVerticalDataCacheKeyHash, WebCore::FontVerticalDataCacheKeyTraits, WTF::HashTraits&lt;WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;::inlineSet&lt;WTF::AtomicString const&amp;, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;&amp;&gt;(WTF::AtomicString const&amp;, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;&amp;)+0x4a) [0x7fbc19e22836]
STDERR: 8   0x7fbc19e202bf /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WTF::HashTableAddResult&lt;WTF::HashTableIterator&lt;WTF::AtomicString, WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt;, WTF::KeyValuePairKeyExtractor&lt;WTF::KeyValuePair&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;, WebCore::FontVerticalDataCacheKeyHash, WTF::HashMap&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;, WebCore::FontVerticalDataCacheKeyHash, WebCore::FontVerticalDataCacheKeyTraits, WTF::HashTraits&lt;WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;::KeyValuePairTraits, WebCore::FontVerticalDataCacheKeyTraits&gt; &gt; WTF::HashMap&lt;WTF::AtomicString, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;, WebCore::FontVerticalDataCacheKeyHash, WebCore::FontVerticalDataCacheKeyTraits, WTF::HashTraits&lt;WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt; &gt; &gt;::set&lt;WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;&amp;&gt;(WTF::AtomicString const&amp;, WTF::RefPtr&lt;WebCore::OpenTypeVerticalData&gt;&amp;)+0x3b) [0x7fbc19e202bf]
STDERR: 9   0x7fbc19e1d566 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::FontCache::getVerticalData(WTF::AtomicString const&amp;, WebCore::FontPlatformData const&amp;)+0x144) [0x7fbc19e1d566]
STDERR: 10  0x7fbc1a7446a5 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::FontPlatformData::verticalData() const+0x95) [0x7fbc1a7446a5]
STDERR: 11  0x7fbc19e0f0da /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::Font::Font(WebCore::FontPlatformData const&amp;, bool, bool, bool)+0x272) [0x7fbc19e0f0da]
STDERR: 12  0x7fbc1945cbf1 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::Font::create(WebCore::FontPlatformData const&amp;, bool, bool, bool)+0x4c) [0x7fbc1945cbf1]
STDERR: 13  0x7fbc19e1d7e3 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::FontCache::fontForPlatformData(WebCore::FontPlatformData const&amp;)+0x61) [0x7fbc19e1d7e3]
STDERR: 14  0x7fbc19e1d73b /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::FontCache::fontForFamily(WebCore::FontDescription const&amp;, WTF::AtomicString const&amp;, WebCore::FontFeatureSettings const*, WebCore::FontVariantSettings const*, bool)+0xad) [0x7fbc19e1d73b]
STDERR: 15  0x7fbc1947643b /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::CSSFontSelector::fontRangesForFamily(WebCore::FontDescription const&amp;, WTF::AtomicString const&amp;)+0x10f) [0x7fbc1947643b]
STDERR: 16  0x7fbc19e3f4dc /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(+0x61f34dc) [0x7fbc19e3f4dc]
STDERR: 17  0x7fbc19e3f892 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::FontCascadeFonts::realizeFallbackRangesAt(WebCore::FontCascadeDescription const&amp;, unsigned int)+0x18e) [0x7fbc19e3f892]
STDERR: 18  0x7fbc19997c9a /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::FontCascadeFonts::primaryFont(WebCore::FontCascadeDescription const&amp;)+0x68) [0x7fbc19997c9a]
STDERR: 19  0x7fbc19997d88 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::FontCascade::primaryFont() const+0x64) [0x7fbc19997d88]
STDERR: 20  0x7fbc19997d1a /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::FontCascade::fontMetrics() const+0x18) [0x7fbc19997d1a]
STDERR: 21  0x7fbc1a245f80 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::RenderStyle::fontMetrics() const+0x28) [0x7fbc1a245f80]
STDERR: 22  0x7fbc1a246276 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::RenderStyle::computedLineHeight() const+0x46) [0x7fbc1a246276]
STDERR: 23  0x7fbc19fb42d6 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::RenderBlock::lineHeight(bool, WebCore::LineDirectionMode, WebCore::LinePositionMode) const+0x144) [0x7fbc19fb42d6]
STDERR: 24  0x7fbc19fb4bc8 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::RenderBlock::minLineHeightForReplacedRenderer(bool, WebCore::LayoutUnit) const+0xe8) [0x7fbc19fb4bc8]
STDERR: 25  0x7fbc1a2060c1 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::LineWidth::updateAvailableWidth(WebCore::LayoutUnit)+0x43) [0x7fbc1a2060c1]
STDERR: 26  0x7fbc1a205fca /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::LineWidth::LineWidth(WebCore::RenderBlockFlow&amp;, bool, WebCore::IndentTextOrNot)+0xd2) [0x7fbc1a205fca]
STDERR: 27  0x7fbc1a1f9bc4 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::LineBreaker::nextLineBreak(WebCore::BidiResolverWithIsolate&lt;WebCore::InlineIterator, WebCore::BidiRun, WebCore::BidiIsolatedRun&gt;&amp;, WebCore::LineInfo&amp;, WebCore::LineLayoutState&amp;, WebCore::RenderTextInfo&amp;, WebCore::FloatingObject*, unsigned int, WTF::Vector&lt;WebCore::WordMeasurement, 64ul, WTF::CrashOnOverflow, 16ul&gt;&amp;)+0x12c) [0x7fbc1a1f9bc4]
STDERR: 28  0x7fbc19ff6d31 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::RenderBlockFlow::layoutRunsAndFloatsInRange(WebCore::LineLayoutState&amp;, WebCore::BidiResolverWithIsolate&lt;WebCore::InlineIterator, WebCore::BidiRun, WebCore::BidiIsolatedRun&gt;&amp;, WebCore::InlineIterator const&amp;, WebCore::BidiStatus const&amp;, unsigned int)+0x369) [0x7fbc19ff6d31]
STDERR: 29  0x7fbc19ff6943 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::RenderBlockFlow::layoutRunsAndFloats(WebCore::LineLayoutState&amp;, bool)+0x41f) [0x7fbc19ff6943]
STDERR: 30  0x7fbc19ff90ff /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::RenderBlockFlow::layoutLineBoxes(bool, WebCore::LayoutUnit&amp;, WebCore::LayoutUnit&amp;)+0x697) [0x7fbc19ff90ff]
STDERR: 31  0x7fbc19fd7395 /home/slave/webkitgtk/gtk-linux-64-debug/build/WebKitBuild/Debug/lib/libwebkit2gtk-4.0.so.37(WebCore::RenderBlockFlow::layoutInlineChildren(bool, WebCore::LayoutUnit&amp;, WebCore::LayoutUnit&amp;)+0xb7) [0x7fbc19fd7395]
STDERR: LEAK: 1 WebProcessPool
STDERR: LEAK: 1 WebPageProxy</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188214</commentid>
    <comment_count>1</comment_count>
      <attachid>277613</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-04-28 05:40:38 -0700</bug_when>
    <thetext>Created attachment 277613
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188245</commentid>
    <comment_count>2</comment_count>
      <attachid>277613</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-04-28 08:26:48 -0700</bug_when>
    <thetext>Comment on attachment 277613
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=277613&amp;action=review

&gt; Source/WebCore/platform/graphics/FontCache.cpp:326
&gt; +        if (!data-&gt;isOpenType()) {
&gt; +            fontVerticalDataCache().remove(addResult.iterator);
&gt; +            return nullptr;
&gt; +        }

This isn’t good, because it will not cache the negative result and so if OpenTypeVerticalData::create returns something that is not OpenType then it will call OpenTypeVerticalData::create again and again every time this function is called. And it will also add/remove an element to/from the hash map every time.

I think what we want instead is:

    if (!data-&gt;isOpenType())
        data = nullptr;

We will cache a nullptr and not call OpenTypeVerticalData::create again next time.

Separately, I also think it’s peculiar that OpenTypeVerticalData::create can create something that returns false to isOpenType. There’s some kind of naming mistake there. I would think, given its name, that function would return nullptr if the data is &quot;not OpenType&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188560</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-04-29 02:21:49 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 277613 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=277613&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/FontCache.cpp:326
&gt; &gt; +        if (!data-&gt;isOpenType()) {
&gt; &gt; +            fontVerticalDataCache().remove(addResult.iterator);
&gt; &gt; +            return nullptr;
&gt; &gt; +        }
&gt; 
&gt; This isn’t good, because it will not cache the negative result and so if
&gt; OpenTypeVerticalData::create returns something that is not OpenType then it
&gt; will call OpenTypeVerticalData::create again and again every time this
&gt; function is called. And it will also add/remove an element to/from the hash
&gt; map every time.
&gt; 
&gt; I think what we want instead is:
&gt; 
&gt;     if (!data-&gt;isOpenType())
&gt;         data = nullptr;
&gt; 
&gt; We will cache a nullptr and not call OpenTypeVerticalData::create again next
&gt; time.

Good point!

&gt; Separately, I also think it’s peculiar that OpenTypeVerticalData::create can
&gt; create something that returns false to isOpenType. There’s some kind of
&gt; naming mistake there. I would think, given its name, that function would
&gt; return nullptr if the data is &quot;not OpenType&quot;.

Yes, I was also surprised, maybe we could move the initialization to the create method and simply return nullptr . I&apos;ll look at it in more detail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188566</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-04-29 02:57:31 -0700</bug_when>
    <thetext>Committed r200237: &lt;http://trac.webkit.org/changeset/200237&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188579</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-04-29 03:40:41 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; Separately, I also think it’s peculiar that OpenTypeVerticalData::create can
&gt; &gt; create something that returns false to isOpenType. There’s some kind of
&gt; &gt; naming mistake there. I would think, given its name, that function would
&gt; &gt; return nullptr if the data is &quot;not OpenType&quot;.
&gt; 
&gt; Yes, I was also surprised, maybe we could move the initialization to the
&gt; create method and simply return nullptr . I&apos;ll look at it in more detail.

See https://bugs.webkit.org/show_bug.cgi?id=157172</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277613</attachid>
            <date>2016-04-28 05:40:38 -0700</date>
            <delta_ts>2016-04-28 08:26:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wcore-vertical-data-cache.diff</filename>
            <type>text/plain</type>
            <size>10740</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA5ZTY2MWNlLi44ZmJlNGYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMzMg
QEAKIDIwMTYtMDQtMjggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgogCisgICAgICAgIFtGcmVlVHlwZV0gQVNTRVJUSU9OIEZBSUxFRDogIWxvb2t1cEZvcldyaXRp
bmcoRXh0cmFjdG9yOjpleHRyYWN0KGVudHJ5KSkuc2Vjb25kIGluIEZvbnRDYWNoZTo6Z2V0VmVy
dGljYWxEYXRhKCkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NzEzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIEkndmUgbm90aWNlZCB0aGF0IHNvbWUgdGVzdHMgZmFpbCByYW5kb21seSBpbiB0aGUgR1RL
KyBkZWJ1ZyBib3QgZHVlIHRvIGFuIGFzc2VydGlvbiBpbiBIYXNoTWFwIHdoZW4gZ2V0dGluZwor
ICAgICAgICB2ZXJ0aWNhbCBkYXRhIGZyb20gdGhlIEZvbnRDYWNoZS4gSSBkb24ndCBrbm93IGV4
YWN0bHkgd2hhdCdzIHdyb25nLCBidXQgbG9va3MgbGlrZSBhIHByb2JsZW0gd2l0aCB0aGUKKyAg
ICAgICAgRm9udFZlcnRpY2FsRGF0YUNhY2hlIGhhc2ggdHJhaXRzIGltcGxlbWVudGF0aW9uLiBM
b29raW5nIGF0IHRoZSBjb2RlLCBJJ3ZlIHJlYWxpemVkIHRoYXQgd2UgY291bGQgc2ltcGxpZnkK
KyAgICAgICAgZXZlcnl0aGluZyBieSByZXVzaW5nIHRoZSBGb250RGF0YUNhY2hlIGhhc2ggYW5k
IHRyYWl0cywgc2luY2Ugd2UgYXJlIGFjdHVhbGx5IHVzaW5nIHRoZQorICAgICAgICBGb250UGxh
dGZvcm1EYXRhOjpoYXNoKCkgaW4gdGhlIGVuZCBpbiBib3RoIGNhc2VzLiBBbHNvLCBJIGRvbid0
IHNlZSB3aHkgd2UgbmVlZCB0byBnZXQgdGhlIHZlcnRpY2FsIGRhdGEgZnJvbQorICAgICAgICB0
aGUgRm9udFBsYXRmb3JtRGF0YSB3aGlsZSBpdCdzIGFjdHVhbGx5IGNhY2hlZCBieSB0aGUgZm9u
dCBjYWNoZS4gV2UgY291bGQganVzdCB1c2UgdGhlIEZvbnRDYWNoZSBkaXJlY3RseQorICAgICAg
ICBwYXNzaW5nIG9ubHkgdGhlIEZvbnRQbGF0Zm9ybURhdGEuIFRoZXNlIGNoYW5nZXMgc2VlbSB0
byBmaXggdGhlIGNyYXNoZXMgYW5kIG1ha2UgdGhlIGNvZGUgYSBsb3Qgc2ltcGxlci4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dDo6Rm9udCk6IFVzZSBGb250Q2FjaGU6OnZlcnRpY2FsRGF0YSgpLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmb250VmVydGlj
YWxEYXRhQ2FjaGUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjp2ZXJ0aWNhbERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEpOiBB
bHNvIHJlbW92ZSB0aGUgY2FjaGVkIHZlcnRpY2FsIGRhdGEgd2hlbiByZW1vdmluZyBhIGZvbnQu
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmludmFsaWRhdGUpOiBDbGVhciBhbHNvIHRo
ZSB2ZXJ0aWNhbCBkYXRhLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRQbGF0Zm9ybURhdGEuaDoKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250UGxhdGZvcm1EYXRhRnJlZVR5cGUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlblR5cGVUYWJsZSk6
IERlbGV0ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVW
ZXJ0aWNhbERhdGEuaDogUmVtb3ZlIHRoZSBtX2luRm9udENhY2hlIG1lbWJlciB0aGF0IGlzIG5v
dyB1bnVzZWQuCisKKzIwMTYtMDQtMjggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBp
Z2FsaWEuY29tPgorCiAgICAgICAgIFJFR1JFU1NJT04ocjE5OTY1OSk6IFdlYiBQcm9jZXNzIGNy
YXNoIHdoZW4gUmVuZGVyVGhlbWU6OmFkanVzdE1lbnVMaXN0U3R5bGUgaXMgY2FsbGVkIHdpdGgg
YSBudWxsIGVsZW1lbnQKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1NzEyNwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3Bw
CmluZGV4IDcyYzc3ZjAuLmYwZjUwYmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuY3BwCkBAIC03Miw3ICs3Miw3IEBAIEZvbnQ6OkZvbnQoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYgcGxhdGZvcm1EYXRhLCBib29sIGlzQ3VzdG9tRm9udCwgYm9vbCBpc0xvYWRpCiAg
ICAgcGxhdGZvcm1DaGFyV2lkdGhJbml0KCk7CiAjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FM
KQogICAgIGlmIChwbGF0Zm9ybURhdGEub3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbCAmJiAhaXNU
ZXh0T3JpZW50YXRpb25GYWxsYmFjaykgewotICAgICAgICBtX3ZlcnRpY2FsRGF0YSA9IHBsYXRm
b3JtRGF0YS52ZXJ0aWNhbERhdGEoKTsKKyAgICAgICAgbV92ZXJ0aWNhbERhdGEgPSBGb250Q2Fj
aGU6OnNpbmdsZXRvbigpLnZlcnRpY2FsRGF0YShwbGF0Zm9ybURhdGEpOwogICAgICAgICBtX2hh
c1ZlcnRpY2FsR2x5cGhzID0gbV92ZXJ0aWNhbERhdGEuZ2V0KCkgJiYgbV92ZXJ0aWNhbERhdGEt
Pmhhc1ZlcnRpY2FsTWV0cmljcygpOwogICAgIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAKaW5kZXggOWZiYzZjNy4uMzZjMGM0NCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwCkBA
IC0yNjcsNjIgKzI2Nyw2IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVk
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvCiAgICAgcmV0dXJuIGl0
LT52YWx1ZS5nZXQoKTsKIH0KIAotI2lmIEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLXN0cnVj
dCBGb250VmVydGljYWxEYXRhQ2FjaGVLZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBGb250Q2FjaGU6OkZvbnRGaWxlS2V5JiBmb250RmlsZUtleSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBQdHJIYXNoPGNvbnN0IEZvbnRDYWNoZTo6Rm9udEZpbGVLZXkqPjo6aGFzaCgm
Zm9udEZpbGVLZXkpOwotICAgIH0KLQotICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEZvbnRD
YWNoZTo6Rm9udEZpbGVLZXkmIGEsIGNvbnN0IEZvbnRDYWNoZTo6Rm9udEZpbGVLZXkmIGIpCi0g
ICAgewotICAgICAgICByZXR1cm4gYSA9PSBiOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLX07Ci0KLXN0cnVjdCBG
b250VmVydGljYWxEYXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPEZv
bnRDYWNoZTo6Rm9udEZpbGVLZXk+IHsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVl
SXNaZXJvID0gdHJ1ZTsKLSAgICBzdGF0aWMgY29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0g
dHJ1ZTsKLSAgICBzdGF0aWMgY29uc3QgRm9udENhY2hlOjpGb250RmlsZUtleSYgZW1wdHlWYWx1
ZSgpCi0gICAgewotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udENhY2hlOjpGb250
RmlsZUtleT4ga2V5ID0gbnVsbEF0b207Ci0gICAgICAgIHJldHVybiBrZXk7Ci0gICAgfQotICAg
IHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGb250Q2FjaGU6OkZvbnRGaWxlS2V5
JiBzbG90KQotICAgIHsKLSAgICAgICAgbmV3IChOb3ROdWxsLCAmc2xvdCkgRm9udENhY2hlOjpG
b250RmlsZUtleShIYXNoVGFibGVEZWxldGVkVmFsdWUpOwotICAgIH0KLSAgICBzdGF0aWMgYm9v
bCBpc0RlbGV0ZWRWYWx1ZShjb25zdCBGb250Q2FjaGU6OkZvbnRGaWxlS2V5JiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwotICAg
IH0KLX07Ci0KLXR5cGVkZWYgSGFzaE1hcDxGb250Q2FjaGU6OkZvbnRGaWxlS2V5LCBSZWZQdHI8
T3BlblR5cGVWZXJ0aWNhbERhdGE+LCBGb250VmVydGljYWxEYXRhQ2FjaGVLZXlIYXNoLCBGb250
VmVydGljYWxEYXRhQ2FjaGVLZXlUcmFpdHM+IEZvbnRWZXJ0aWNhbERhdGFDYWNoZTsKLQotRm9u
dFZlcnRpY2FsRGF0YUNhY2hlJiBmb250VmVydGljYWxEYXRhQ2FjaGVJbnN0YW5jZSgpCi17Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEZvbnRWZXJ0aWNhbERhdGFDYWNoZT4gZm9udFZlcnRp
Y2FsRGF0YUNhY2hlOwotICAgIHJldHVybiBmb250VmVydGljYWxEYXRhQ2FjaGU7Ci19Ci0KLVBh
c3NSZWZQdHI8T3BlblR5cGVWZXJ0aWNhbERhdGE+IEZvbnRDYWNoZTo6Z2V0VmVydGljYWxEYXRh
KGNvbnN0IEZvbnRGaWxlS2V5JiBrZXksIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3Jt
RGF0YSkKLXsKLSAgICBGb250VmVydGljYWxEYXRhQ2FjaGUmIGZvbnRWZXJ0aWNhbERhdGFDYWNo
ZSA9IGZvbnRWZXJ0aWNhbERhdGFDYWNoZUluc3RhbmNlKCk7Ci0gICAgRm9udFZlcnRpY2FsRGF0
YUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBmb250VmVydGljYWxEYXRhQ2FjaGUuZmluZChrZXkp
OwotICAgIGlmIChyZXN1bHQgIT0gZm9udFZlcnRpY2FsRGF0YUNhY2hlLmVuZCgpKQotICAgICAg
ICByZXR1cm4gcmVzdWx0LmdldCgpLT52YWx1ZTsKLQotICAgIFJlZlB0cjxPcGVuVHlwZVZlcnRp
Y2FsRGF0YT4gdmVydGljYWxEYXRhID0gT3BlblR5cGVWZXJ0aWNhbERhdGE6OmNyZWF0ZShwbGF0
Zm9ybURhdGEpOwotICAgIGlmICghdmVydGljYWxEYXRhLT5pc09wZW5UeXBlKCkpCi0gICAgICAg
IHZlcnRpY2FsRGF0YSA9IG51bGxwdHI7Ci0gICAgZm9udFZlcnRpY2FsRGF0YUNhY2hlLnNldChr
ZXksIHZlcnRpY2FsRGF0YSk7Ci0gICAgcmV0dXJuIHZlcnRpY2FsRGF0YTsKLX0KLSNlbmRpZgot
CiBzdHJ1Y3QgRm9udERhdGFDYWNoZUtleUhhc2ggewogICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSkKICAgICB7CkBAIC0zNjIsNiAr
MzA2LDI5IEBAIHN0YXRpYyBGb250RGF0YUNhY2hlJiBjYWNoZWRGb250cygpCiAgICAgcmV0dXJu
IGNhY2hlOwogfQogCisjaWYgRU5BQkxFKE9QRU5UWVBFX1ZFUlRJQ0FMKQordHlwZWRlZiBIYXNo
TWFwPEZvbnRQbGF0Zm9ybURhdGEsIFJlZlB0cjxPcGVuVHlwZVZlcnRpY2FsRGF0YT4sIEZvbnRE
YXRhQ2FjaGVLZXlIYXNoLCBGb250RGF0YUNhY2hlS2V5VHJhaXRzPiBGb250VmVydGljYWxEYXRh
Q2FjaGU7CisKK0ZvbnRWZXJ0aWNhbERhdGFDYWNoZSYgZm9udFZlcnRpY2FsRGF0YUNhY2hlKCkK
K3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Rm9udFZlcnRpY2FsRGF0YUNhY2hlPiBmb250
VmVydGljYWxEYXRhQ2FjaGU7CisgICAgcmV0dXJuIGZvbnRWZXJ0aWNhbERhdGFDYWNoZTsKK30K
KworUmVmUHRyPE9wZW5UeXBlVmVydGljYWxEYXRhPiBGb250Q2FjaGU6OnZlcnRpY2FsRGF0YShj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCit7CisgICAgYXV0byBhZGRSZXN1
bHQgPSBmb250VmVydGljYWxEYXRhQ2FjaGUoKS5hZGQocGxhdGZvcm1EYXRhLCBudWxscHRyKTsK
KyAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgUmVmUHRyPE9wZW5UeXBl
VmVydGljYWxEYXRhPiBkYXRhID0gT3BlblR5cGVWZXJ0aWNhbERhdGE6OmNyZWF0ZShwbGF0Zm9y
bURhdGEpOworICAgICAgICBpZiAoIWRhdGEtPmlzT3BlblR5cGUoKSkgeworICAgICAgICAgICAg
Zm9udFZlcnRpY2FsRGF0YUNhY2hlKCkucmVtb3ZlKGFkZFJlc3VsdC5pdGVyYXRvcik7CisgICAg
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgfQorICAgICAgICBhZGRSZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gV1RGTW92ZShkYXRhKTsKKyAgICB9CisgICAgcmV0dXJuIGFkZFJlc3Vs
dC5pdGVyYXRvci0+dmFsdWU7Cit9CisjZW5kaWYKIAogI2lmIFBMQVRGT1JNKElPUykKIGNvbnN0
IHVuc2lnbmVkIGNNYXhJbmFjdGl2ZUZvbnREYXRhID0gMTIwOwpAQCAtNDQwLDYgKzQwNyw5IEBA
IHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9udERhdGEodW5zaWduZWQgcHVyZ2VDb3Vu
dCkKICAgICAgICAgZm9yIChhdXRvJiBmb250IDogZm9udHNUb0RlbGV0ZSkgewogICAgICAgICAg
ICAgYm9vbCBzdWNjZXNzID0gY2FjaGVkRm9udHMoKS5yZW1vdmUoZm9udC0+cGxhdGZvcm1EYXRh
KCkpOwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChzdWNjZXNzLCBzdWNjZXNzKTsKKyNpZiBF
TkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCisgICAgICAgICAgICBmb250VmVydGljYWxEYXRhQ2Fj
aGUoKS5yZW1vdmUoZm9udC0+cGxhdGZvcm1EYXRhKCkpOworI2VuZGlmCiAgICAgICAgIH0KICAg
ICB9OwogCkBAIC00NTIsMzAgKzQyMiw2IEBAIHZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZl
Rm9udERhdGEodW5zaWduZWQgcHVyZ2VDb3VudCkKICAgICBmb3IgKGF1dG8mIGtleSA6IGtleXNU
b1JlbW92ZSkKICAgICAgICAgZm9udFBsYXRmb3JtRGF0YUNhY2hlKCkucmVtb3ZlKGtleSk7CiAK
LSNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgRm9udFZlcnRpY2FsRGF0YUNhY2hl
JiBmb250VmVydGljYWxEYXRhQ2FjaGUgPSBmb250VmVydGljYWxEYXRhQ2FjaGVJbnN0YW5jZSgp
OwotICAgIGlmICghZm9udFZlcnRpY2FsRGF0YUNhY2hlLmlzRW1wdHkoKSkgewotICAgICAgICAv
LyBNYXJrICYgc3dlZXAgdW51c2VkIHZlcnRpY2FsRGF0YQotICAgICAgICBmb3IgKGF1dG8mIHZl
cnRpY2FsRGF0YSA6IGZvbnRWZXJ0aWNhbERhdGFDYWNoZS52YWx1ZXMoKSkgewotICAgICAgICAg
ICAgaWYgKHZlcnRpY2FsRGF0YSkKLSAgICAgICAgICAgICAgICB2ZXJ0aWNhbERhdGEtPm1faW5G
b250Q2FjaGUgPSBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGF1dG8mIGZvbnQgOiBj
YWNoZWRGb250cygpLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBhdXRvKiB2ZXJ0aWNhbERhdGEg
PSBjb25zdF9jYXN0PE9wZW5UeXBlVmVydGljYWxEYXRhKj4oZm9udC0+dmVydGljYWxEYXRhKCkp
OwotICAgICAgICAgICAgaWYgKHZlcnRpY2FsRGF0YSkKLSAgICAgICAgICAgICAgICB2ZXJ0aWNh
bERhdGEtPm1faW5Gb250Q2FjaGUgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIFZlY3RvcjxG
b250RmlsZUtleT4ga2V5c1RvUmVtb3ZlOwotICAgICAgICBrZXlzVG9SZW1vdmUucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShmb250VmVydGljYWxEYXRhQ2FjaGUuc2l6ZSgpKTsKLSAgICAgICAgZm9y
IChhdXRvJiBpdCA6IGZvbnRWZXJ0aWNhbERhdGFDYWNoZSkgewotICAgICAgICAgICAgaWYgKCFp
dC52YWx1ZSB8fCAhaXQudmFsdWUtPm1faW5Gb250Q2FjaGUpCi0gICAgICAgICAgICAgICAga2V5
c1RvUmVtb3ZlLmFwcGVuZChpdC5rZXkpOwotICAgICAgICB9Ci0gICAgICAgIGZvciAoYXV0byYg
a2V5IDoga2V5c1RvUmVtb3ZlKQotICAgICAgICAgICAgZm9udFZlcnRpY2FsRGF0YUNhY2hlLnJl
bW92ZShrZXkpOwotICAgIH0KLSNlbmRpZgotCiAgICAgcGxhdGZvcm1QdXJnZUluYWN0aXZlRm9u
dERhdGEoKTsKIH0KIApAQCAtNTMxLDYgKzQ3Nyw5IEBAIHZvaWQgRm9udENhY2hlOjppbnZhbGlk
YXRlKCkKICAgICB9CiAKICAgICBmb250UGxhdGZvcm1EYXRhQ2FjaGUoKS5jbGVhcigpOworI2lm
IEVOQUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKKyAgICBmb250VmVydGljYWxEYXRhQ2FjaGUoKS5j
bGVhcigpOworI2VuZGlmCiAgICAgaW52YWxpZGF0ZUZvbnRDYXNjYWRlQ2FjaGUoKTsKIAogICAg
IGdHZW5lcmF0aW9uKys7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250Q2FjaGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRD
YWNoZS5oCmluZGV4IGZkYmIxZjcuLmU4OGRlYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5oCkBAIC0yMDksOCArMjA5LDcgQEAgcHVibGljOgogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgdHlwZWRlZiBBdG9taWNT
dHJpbmcgRm9udEZpbGVLZXk7Ci0gICAgUGFzc1JlZlB0cjxPcGVuVHlwZVZlcnRpY2FsRGF0YT4g
Z2V0VmVydGljYWxEYXRhKGNvbnN0IEZvbnRGaWxlS2V5JiwgY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYpOworICAgIFJlZlB0cjxPcGVuVHlwZVZlcnRpY2FsRGF0YT4gdmVydGljYWxEYXRhKGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmKTsKICNlbmRpZgogCiBwcml2YXRlOgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4IGU4MWQ5
NDUuLjgyN2Y1NDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250UGxhdGZvcm1EYXRhLmgKQEAgLTE2Miw3ICsxNjIsNiBAQCBwdWJsaWM6CiAjaWYgVVNF
KEZSRUVUWVBFKQogICAgIEhhcmZCdXp6RmFjZSogaGFyZkJ1enpGYWNlKCkgY29uc3Q7CiAgICAg
Ym9vbCBoYXNDb21wYXRpYmxlQ2hhcm1hcCgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8T3BlblR5
cGVWZXJ0aWNhbERhdGE+IHZlcnRpY2FsRGF0YSgpIGNvbnN0OwogICAgIEZjRm9udFNldCogZmFs
bGJhY2tzKCkgY29uc3Q7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0ZvbnRQbGF0Zm9ybURhdGFG
cmVlVHlwZS5jcHAKaW5kZXggYzZiZDUzNS4uYmY3YTU2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvRm9udFBsYXRmb3JtRGF0YUZyZWVUeXBl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9Gb250
UGxhdGZvcm1EYXRhRnJlZVR5cGUuY3BwCkBAIC0zNTYsMTIgKzM1Niw2IEBAIGJvb2wgRm9udFBs
YXRmb3JtRGF0YTo6aGFzQ29tcGF0aWJsZUNoYXJtYXAoKSBjb25zdAogICAgICAgICAmJiBGVF9T
ZWxlY3RfQ2hhcm1hcChmcmVlVHlwZUZhY2UsIGZ0X2VuY29kaW5nX2FwcGxlX3JvbWFuKSk7CiB9
CiAKLVBhc3NSZWZQdHI8T3BlblR5cGVWZXJ0aWNhbERhdGE+IEZvbnRQbGF0Zm9ybURhdGE6OnZl
cnRpY2FsRGF0YSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc2goKSk7Ci0gICAgcmV0dXJuIEZv
bnRDYWNoZTo6c2luZ2xldG9uKCkuZ2V0VmVydGljYWxEYXRhKFN0cmluZzo6bnVtYmVyKGhhc2go
KSksICp0aGlzKTsKLX0KLQogUmVmUHRyPFNoYXJlZEJ1ZmZlcj4gRm9udFBsYXRmb3JtRGF0YTo6
b3BlblR5cGVUYWJsZSh1aW50MzJfdCB0YWJsZSkgY29uc3QKIHsKICAgICBDYWlyb0Z0RmFjZUxv
Y2tlciBjYWlyb0Z0RmFjZUxvY2tlcihtX3NjYWxlZEZvbnQuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNh
bERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5U
eXBlVmVydGljYWxEYXRhLmgKaW5kZXggZWJhMWFiYy4uZmMzMmQ1ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERh
dGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVudHlwZS9PcGVu
VHlwZVZlcnRpY2FsRGF0YS5oCkBAIC02NSw5ICs2NSw2IEBAIHByaXZhdGU6CiAgICAgVmVjdG9y
PGludDE2X3Q+IG1fdG9wU2lkZUJlYXJpbmdzOwogICAgIGludDE2X3QgbV9kZWZhdWx0VmVydE9y
aWdpblk7CiAgICAgSGFzaE1hcDxHbHlwaCwgaW50MTZfdD4gbV92ZXJ0T3JpZ2luWTsKLQotICAg
IGZyaWVuZCBjbGFzcyBGb250Q2FjaGU7Ci0gICAgYm9vbCBtX2luRm9udENhY2hlOyAvLyBmb3Ig
bWFyayAmIHN3ZWVwIGluIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCkKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
</data>
<flag name="review"
          id="301758"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>