<?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>62498</bug_id>
          
          <creation_ts>2011-06-11 00:16:37 -0700</creation_ts>
          <short_desc>Additional FontCache::FontCachePurgePreventer instances needed</short_desc>
          <delta_ts>2011-06-13 14:09:06 -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>Layout and Rendering</component>
          <version>528+ (Nightly 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></keywords>
          <priority>P1</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>ggaren</cc>
    
    <cc>mrobinson</cc>
    
    <cc>msaboff</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>419185</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-11 00:16:37 -0700</bug_when>
    <thetext>Multiple tests are hitting assertion in FontCache::getCachedFontData on GTK:
ASSERTION FAILED: m_purgePreventCount
../../Source/WebCore/platform/graphics/FontCache.cpp(274) : WebCore::SimpleFontData* WebCore::FontCache::getCachedFontData(const WebCore::FontPlatformData*, WebCore::FontCache::ShouldRetain)

Maybe related to http://trac.webkit.org/changeset/88260 ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419186</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-06-11 00:17:40 -0700</bug_when>
    <thetext>http://build.webkit.org/results/GTK%20Linux%2032-bit%20Debug/r88590%20(15797)/results.html
http://build.webkit.org/results/GTK%20Linux%2064-bit%20Debug/r88599%20(23269)/results.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419206</commentid>
    <comment_count>2</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-11 08:20:43 -0700</bug_when>
    <thetext>Michael, any idea why we are hitting this ASSERT? Also what is the purpose of ASSERT_DISABLED in FontCache.cpp. It doesn&apos;t appear to be used at all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419207</commentid>
    <comment_count>3</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2011-06-11 08:32:17 -0700</bug_when>
    <thetext>Here&apos;s the backtrace:

#0  0x00002b91548e7037 in WebCore::FontCache::getCachedFontData (this=0xf9b6b0, platformData=0x7ffffe765270, shouldRetain=WebCore::FontCache::DoNotRetain) at ../../Source/WebCore/platform/graphics/FontCache.cpp:274
#1  0x00002b9154d765de in WebCore::FontCache::getFontDataForCharacters (this=0xf9b6b0, font=..., characters=UnicodeEncodeError: &apos;ascii&apos; codec can&apos;t encode characters in position 0-1: ordinal not in range(128)
, length=1) at ../../Source/WebCore/platform/graphics/freetype/FontCacheFreeType.cpp:92
#2  0x00002b91548f7204 in WebCore::Font::glyphDataForCharacter (this=0x21d81e8, c=1513, mirror=false, variant=WebCore::NormalVariant) at ../../Source/WebCore/platform/graphics/FontFastPath.cpp:195
#3  0x00002b915492df04 in WebCore::WidthIterator::advance (this=0x7ffffe765720, offset=28, glyphBuffer=0x0) at ../../Source/WebCore/platform/graphics/WidthIterator.cpp:126
#4  0x00002b91548f8267 in WebCore::Font::floatWidthForSimpleText (this=0x21d81e8, run=..., glyphBuffer=0x0, fallbackFonts=0x0, glyphOverflow=0x0) at ../../Source/WebCore/platform/graphics/FontFastPath.cpp:453
#5  0x00002b91548f3e42 in WebCore::Font::width (this=0x21d81e8, run=..., fallbackFonts=0x0, glyphOverflow=0x0) at ../../Source/WebCore/platform/graphics/Font.cpp:190
#6  0x00002b9154a9914d in WebCore::RenderMenuList::updateOptionsWidth (this=0x21d1c38) at ../../Source/WebCore/rendering/RenderMenuList.cpp:162
#7  0x00002b9154a99235 in WebCore::RenderMenuList::updateFromElement (this=0x21d1c38) at ../../Source/WebCore/rendering/RenderMenuList.cpp:177
#8  0x00002b915462a1b7 in WebCore::updateFromElementCallback (node=0x21d1130) at ../../Source/WebCore/html/HTMLFormControlElement.cpp:265
#9  0x00002b915444288f in WebCore::ContainerNode::dispatchPostAttachCallbacks () at ../../Source/WebCore/dom/ContainerNode.cpp:746
#10 0x00002b91544426ea in WebCore::ContainerNode::resumePostAttachCallbacks (this=0x21c0030) at ../../Source/WebCore/dom/ContainerNode.cpp:713
#11 0x00002b915445b3cd in WebCore::Document::recalcStyle (this=0x21c0030, change=WebCore::Node::NoChange) at ../../Source/WebCore/dom/Document.cpp:1564
#12 0x00002b915445b57d in WebCore::Document::updateStyleIfNeeded (this=0x21c0030) at ../../Source/WebCore/dom/Document.cpp:1586
#13 0x00002b915445b716 in WebCore::Document::updateLayout (this=0x21c0030) at ../../Source/WebCore/dom/Document.cpp:1613
#14 0x00002b915445b868 in WebCore::Document::updateLayoutIgnorePendingStylesheets (this=0x21c0030) at ../../Source/WebCore/dom/Document.cpp:1649
#15 0x00002b91543206ef in WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue (this=0x21d7540, propertyID=1002, updateLayout=WebCore::UpdateLayout) at ../../Source/WebCore/css/CSSComputedStyleDeclaration.cpp:803
#16 0x00002b915431f538 in WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue (this=0x21d7540, propertyID=1002) at ../../Source/WebCore/css/CSSComputedStyleDeclaration.cpp:675
#17 0x00002b91543d19a4 in WebCore::CSSStyleDeclaration::getPropertyCSSValue (this=0x21d7540, propertyName=&quot;direction&quot;) at ../../Source/WebCore/css/CSSStyleDeclaration.cpp:52
#18 0x00002b915425e207 in WebCore::JSCSSStyleDeclaration::nameGetter (exec=0x2b91a8014038, slotBase=..., propertyName=&quot;direction&quot;) at ../../Source/WebCore/bindings/js/JSCSSStyleDeclarationCustom.cpp:155
#19 0x00002b915336ed69 in JSC::PropertySlot::getValue (this=0x7ffffe767950, exec=0x2b91a8014038, propertyName=&quot;direction&quot;) at ../../Source/JavaScriptCore/runtime/PropertySlot.h:75
#20 0x00002b91534381e7 in JSC::JSValue::get (this=0x7ffffe7679a0, exec=0x2b91a8014038, propertyName=&quot;direction&quot;, slot=...) at ../../Source/JavaScriptCore/runtime/JSObject.h:772
#21 0x00002b915342b787 in JSC::cti_op_get_by_id (args=0x7ffffe767a10) at ../../Source/JavaScriptCore/jit/JITStubs.cpp:1592
#22 0x00002b9153429b92 in JSC::JITThunks::tryCacheGetByID (callFrame=0x2b916800b182, codeBlock=0x7ffffe767a10, returnAddress=..., baseValue=..., propertyName=, slot=..., stubInfo=0x156e380) at ../../Source/JavaScriptCore/jit/JITStubs.cpp:943
#23 0x00002b91533fbfe9 in JSC::JITCode::execute (this=0x2b91a8e14180, registerFile=0xf994d8, callFrame=0x2b91a8014038, globalData=0x156e380) at ../../Source/JavaScriptCore/jit/JITCode.h:77
#24 0x00002b91533f83e7 in JSC::Interpreter::execute (this=0xf994c0, program=0x2b91a8e14168, callFrame=0x2b91a84f08f0, scopeChain=0x2b91a876c6e0, thisObj=0x2b91a84e0168) at ../../Source/JavaScriptCore/interpreter/Interpreter.cpp:778
#25 0x00002b915349130a in JSC::evaluate (exec=0x2b91a84f08f0, scopeChain=0x2b91a876c6e0, source=..., thisValue=...) at ../../Source/JavaScriptCore/runtime/Completion.cpp:64
#26 0x00002b915429ca01 in WebCore::JSMainThreadExecState::evaluate (exec=0x2b91a84f08f0, chain=0x2b91a876c6e0, source=..., thisValue=...) at ../../Source/WebCore/bindings/js/JSMainThreadExecState.h:54
#27 0x00002b91542ce602 in WebCore::ScriptController::evaluateInWorld (this=0xf16cf8, sourceCode=..., world=0x1574840) at ../../Source/WebCore/bindings/js/ScriptController.cpp:143
#28 0x00002b91542ce7c2 in WebCore::ScriptController::evaluate (this=0xf16cf8, sourceCode=...) at ../../Source/WebCore/bindings/js/ScriptController.cpp:166
#29 0x00002b91544f8ebe in WebCore::ScriptElement::executeScript (this=0x21d3fe0, sourceCode=...) at ../../Source/WebCore/dom/ScriptElement.cpp:285
#30 0x00002b91544f8ab8 in WebCore::ScriptElement::prepareScript (this=0x21d3fe0, scriptStartPosition=..., supportLegacyTypes=WebCore::ScriptElement::DisallowLegacyTypeInTypeAttribute) at ../../Source/WebCore/dom/ScriptElement.cpp:241
#31 0x00002b9154693577 in WebCore::HTMLScriptRunner::runScript (this=0x21a4650, script=0x21d3f60, scriptStartPosition=...) at ../../Source/WebCore/html/parser/HTMLScriptRunner.cpp:296
#32 0x00002b9154692be8 in WebCore::HTMLScriptRunner::execute (this=0x21a4650, scriptElement=..., scriptStartPosition=...) at ../../Source/WebCore/html/parser/HTMLScriptRunner.cpp:170
#33 0x00002b9154685f5d in WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder (this=0x216b690) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:205
#34 0x00002b9154686019 in WebCore::HTMLDocumentParser::canTakeNextToken (this=0x216b690, mode=WebCore::HTMLDocumentParser::AllowYield, session=...) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:223
#35 0x00002b91546863f8 in WebCore::HTMLDocumentParser::pumpTokenizer (this=0x216b690, mode=WebCore::HTMLDocumentParser::AllowYield) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:261
#36 0x00002b9154685db2 in WebCore::HTMLDocumentParser::pumpTokenizerIfPossible (this=0x216b690, mode=WebCore::HTMLDocumentParser::AllowYield) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:175
#37 0x00002b9154686900 in WebCore::HTMLDocumentParser::append (this=0x216b690, source=...) at ../../Source/WebCore/html/parser/HTMLDocumentParser.cpp:367
#38 0x00002b9154447a85 in WebCore::DecodedDataDocumentParser::appendBytes (this=0x216b690, writer=0x2171320, data=0x218fd20 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;meta http-equiv=\&quot;Content-Type\&quot; content=\&quot;text/html; charset=utf-8\&quot;&gt;\n&lt;style&gt;\n   select { display: block; font-size: 16px; }\n   .reflection { font: 13px \&quot;Lucida Grande\&quot;; pa&quot;..., length=2473, shouldFlush=false) at ../../Source/WebCore/dom/DecodedDataDocumentParser.cpp:54
#39 0x00002b91547b2711 in WebCore::DocumentWriter::addData (this=0x2171320, str=0x218fd20 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;meta http-equiv=\&quot;Content-Type\&quot; content=\&quot;text/html; charset=utf-8\&quot;&gt;\n&lt;style&gt;\n   select { display: block; font-size: 16px; }\n   .reflection { font: 13px \&quot;Lucida Grande\&quot;; pa&quot;..., len=2473, flush=false) at ../../Source/WebCore/loader/DocumentWriter.cpp:203
#40 0x00002b91547a6b21 in WebCore::DocumentLoader::commitData (this=0x2171220, bytes=0x218fd20 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;meta http-equiv=\&quot;Content-Type\&quot; content=\&quot;text/html; charset=utf-8\&quot;&gt;\n&lt;style&gt;\n   select { display: block; font-size: 16px; }\n   .reflection { font: 13px \&quot;Lucida Grande\&quot;; pa&quot;..., length=2473) at ../../Source/WebCore/loader/DocumentLoader.cpp:321
#41 0x00002b915413dcb2 in WebKit::FrameLoaderClient::committedLoad (this=0xf70df0, loader=0x2171220, data=0x218fd20 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;meta http-equiv=\&quot;Content-Type\&quot; content=\&quot;text/html; charset=utf-8\&quot;&gt;\n&lt;style&gt;\n   select { display: block; font-size: 16px; }\n   .reflection { font: 13px \&quot;Lucida Grande\&quot;; pa&quot;..., length=2473) at ../../Source/WebKit/gtk/WebCoreSupport/FrameLoaderClientGtk.cpp:320
#42 0x00002b91547a69f5 in WebCore::DocumentLoader::commitLoad (this=0x2171220, data=0x218fd20 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;meta http-equiv=\&quot;Content-Type\&quot; content=\&quot;text/html; charset=utf-8\&quot;&gt;\n&lt;style&gt;\n   select { display: block; font-size: 16px; }\n   .reflection { font: 13px \&quot;Lucida Grande\&quot;; pa&quot;..., length=2473) at ../../Source/WebCore/loader/DocumentLoader.cpp:307
#43 0x00002b91547a6be0 in WebCore::DocumentLoader::receivedData (this=0x2171220, data=0x218fd20 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;meta http-equiv=\&quot;Content-Type\&quot; content=\&quot;text/html; charset=utf-8\&quot;&gt;\n&lt;style&gt;\n   select { display: block; font-size: 16px; }\n   .reflection { font: 13px \&quot;Lucida Grande\&quot;; pa&quot;..., length=2473) at ../../Source/WebCore/loader/DocumentLoader.cpp:333
#44 0x00002b91547f1231 in WebCore::MainResourceLoader::addData (this=0x21a5380, data=0x218fd20 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;meta http-equiv=\&quot;Content-Type\&quot; content=\&quot;text/html; charset=utf-8\&quot;&gt;\n&lt;style&gt;\n   select { display: block; font-size: 16px; }\n   .reflection { font: 13px \&quot;Lucida Grande\&quot;; pa&quot;..., length=2473, allAtOnce=false) at ../../Source/WebCore/loader/MainResourceLoader.cpp:168
#45 0x00002b91547fe6c7 in WebCore::ResourceLoader::didReceiveData (this=0x21a5380, data=0x218fd20 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;meta http-equiv=\&quot;Content-Type\&quot; content=\&quot;text/html; charset=utf-8\&quot;&gt;\n&lt;style&gt;\n   select { display: block; font-size: 16px; }\n   .reflection { font: 13px \&quot;Lucida Grande\&quot;; pa&quot;..., length=2473, encodedDataLength=2473, allAtOnce=false) at ../../Source/WebCore/loader/ResourceLoader.cpp:280
#46 0x00002b91547f2618 in WebCore::MainResourceLoader::didReceiveData (this=0x21a5380, data=0x218fd20 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;meta http-equiv=\&quot;Content-Type\&quot; content=\&quot;text/html; charset=utf-8\&quot;&gt;\n&lt;style&gt;\n   select { display: block; font-size: 16px; }\n   .reflection { font: 13px \&quot;Lucida Grande\&quot;; pa&quot;..., length=2473, encodedDataLength=2473, allAtOnce=false) at ../../Source/WebCore/loader/MainResourceLoader.cpp:464
#47 0x00002b91547fefca in WebCore::ResourceLoader::didReceiveData (this=0x21a5380, data=0x218fd20 &quot;&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;\n&lt;meta http-equiv=\&quot;Content-Type\&quot; content=\&quot;text/html; charset=utf-8\&quot;&gt;\n&lt;style&gt;\n   select { display: block; font-size: 16px; }\n   .reflection { font: 13px \&quot;Lucida Grande\&quot;; pa&quot;..., length=2473, encodedDataLength=2473) at ../../Source/WebCore/loader/ResourceLoader.cpp:443
#48 0x00002b9154d6872b in WebCore::readCallback (source=0x2125640, asyncResult=0x1fea6a0, data=0x0) at ../../Source/WebCore/platform/network/soup/ResourceHandleSoup.cpp:801
#49 0x00002b915830fb59 in async_ready_callback_wrapper (source_object=0x2125640, res=0x1fea6a0, user_data=0x0) at /tmp/buildd/glib2.0-2.28.6/./gio/ginputstream.c:470
#50 0x00002b915831fa68 in complete_in_idle_cb_for_thread (_data=0x21a8f40) at /tmp/buildd/glib2.0-2.28.6/./gio/gsimpleasyncresult.c:812
#51 0x00002b9158e8d4a3 in g_main_dispatch (context=0xefaa40) at /tmp/buildd/glib2.0-2.28.6/./glib/gmain.c:2440
#52 g_main_context_dispatch (context=0xefaa40) at /tmp/buildd/glib2.0-2.28.6/./glib/gmain.c:3013
#53 0x00002b9158e8dc80 in g_main_context_iterate (context=0xefaa40, block=1, dispatch=1, self=&lt;value optimized out&gt;) at /tmp/buildd/glib2.0-2.28.6/./glib/gmain.c:3091
#54 0x00002b9158e8e2f2 in g_main_loop_run (loop=0x21684e0) at /tmp/buildd/glib2.0-2.28.6/./glib/gmain.c:3299
#55 0x00002b9156dc92b7 in gtk_main () from /usr/lib/libgtk-x11-2.0.so.0
#56 0x000000000042a989 in runTest (testPathOrURL=...) at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:705
#57 0x000000000042a026 in runTestingServerLoop () at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:497
#58 0x000000000042c2f4 in main (argc=2, argv=0x7ffffe769408) at ../../Tools/DumpRenderTree/gtk/DumpRenderTree.cpp:1183

Some observations:

* It&apos;s trying to render a string with Lucida Grande. We do not have Lucida Grande on the bots, as it&apos;s non-free.
* It&apos;s trying to get a fallback font when it fails.

Perhaps this RenderMenuList method just needs to have a FontCachePurgePreventer on the stack.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419209</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-06-11 08:58:15 -0700</bug_when>
    <thetext>You are correct that we need to add FontCachePurgePreventer.  I was evaluating other places in platform code to add this.  I&apos;ll post a patch for this hopefully later today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419712</commentid>
    <comment_count>5</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-06-13 11:19:36 -0700</bug_when>
    <thetext>Renamed bug to cover other instances where FontCachePurgePreventer instances are needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419718</commentid>
    <comment_count>6</comment_count>
      <attachid>96980</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-06-13 11:28:48 -0700</bug_when>
    <thetext>Created attachment 96980
Patch with additional instances of FontCachePurgePreventer

Used several techniques to find additional locations to add FontCachePurgePreventer instances.
 - The traceback from this bug.
 - A radar &lt;rdar://problem/9588525&gt; with code inspection
 - In FontCache.cpp, set cMaxInactiveFontData and cTargetInactiveFontData to 0 which forces purging inactive fonts after last nested FontCachePurgePreventer is destructed.  Built webkit with this temp change and run tests looking for ASSERT failure.
 - Code inspection of platform code that calls either Font::drawText() or Canvas::drawText().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>419855</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2011-06-13 14:09:06 -0700</bug_when>
    <thetext>Committed r88691: &lt;http://trac.webkit.org/changeset/88691&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96980</attachid>
            <date>2011-06-13 11:28:48 -0700</date>
            <delta_ts>2011-06-13 11:30:45 -0700</delta_ts>
            <desc>Patch with additional instances of FontCachePurgePreventer</desc>
            <filename>62498.patch</filename>
            <type>text/plain</type>
            <size>6431</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4NjQ5KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMTEtMDYtMTMgIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBGb250Q2FjaGU6OkZvbnRDYWNoZVB1cmdl
UHJldmVudGVyIGluc3RhbmNlcyBuZWVkZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTYyNDk4CisKKyAgICAgICAgQWRkZWQgc29tZSBuZWVkZWQgYW5k
IHNwZWN1bGF0aXZlIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIG9iamVjdHMuCisgICAgICAgIEJ1
aWx0IGFuZCByYW4gU2FmYXJpIHdpdGggZGVidWcgdmVyc2lvbiBvZiB3ZWJraXQgdGhhdCBwdXJn
ZXMgYWxsCisgICAgICAgIHB1cmdlYWJsZSBmb250cyBpbiBGb250Q2FjaGU6OnB1cmdlSW5hY3Rp
dmVGb250RGF0YUlmTmVlZGVkIGluIG9yZGVyCisgICAgICAgIHRvIGZpbmQgc3lzdGVtIGZhbGxi
YWNrIGZvbnRzIGFjY2VzcyB2aWEgY29kZSBwYXRocyB0aGF0IGFyZW4ndAorICAgICAgICBwcm90
ZWN0ZWQgd2l0aCBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBvYmplY3RzLiAgQWxzbyBleGFtaW5l
ZAorICAgICAgICBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlIHRoYXQgY2FsbHMgZWl0aGVyIEZvbnQ6
OmRyYXdUZXh0KCkgb3IKKyAgICAgICAgQ2FudmFzOjpkcmF3VGV4dCgpLiAgRm9yIHRob3NlIG1l
dGhvZHMgdGhhdCBtYXkgYmUgY2FsbGVkIGZyb20gY3VycmVudGx5CisgICAgICAgIHVucHJvdGVj
dGVkIHBhdGhzLCBhZGRlZCBGb250Q2FjaGVQdXJnZVByZXZlbnRlciBvYmplY3RzLgorCisgICAg
ICAgIE5vIG5ldyBmdW5jdGlvbmFsaXR5IHNvIG5vIG5ldyB0ZXN0cy4KKworICAgICAgICAqIGlu
c3BlY3Rvci9ET01Ob2RlSGlnaGxpZ2h0ZXIuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbC5jcHA6CisgICAgICAgIChQbGF0
Zm9ybUNBTGF5ZXJXaW5JbnRlcm5hbDo6ZGlzcGxheUNhbGxiYWNrKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNDSGVhZHNVcERpc3BsYXk6OmRyYXdIdWRDb250ZW50cyk6CisgICAgICAgICog
cGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OndpZHRoV2l0
aEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd0F0UG9pbnQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZW51TGlz
dDo6dXBkYXRlT3B0aW9uc1dpZHRoKToKKwogMjAxMS0wNi0xMyAgVG9ueSBDaGFuZyAgPHRvbnlA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdodGVyLmNwcAkocmV2
aXNpb24gODg2NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvRE9NTm9kZUhpZ2hsaWdo
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2lmIEVOQUJMRShJTlNQ
RUNUT1IpCiAKICNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAj
aW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJHcmFw
aGljc0NvbnRleHQuaCIKQEAgLTEzOSw2ICsxNDAsNyBAQCB2b2lkIGRyYXdFbGVtZW50VGl0bGUo
R3JhcGhpY3NDb250ZXh0JiBjCiAgICAgc3RhdGljIGNvbnN0IENvbG9yIHRvb2x0aXBCYWNrZ3Jv
dW5kQ29sb3IoMjU1LCAyNTUsIDE5NCwgMjU1KTsKICAgICBzdGF0aWMgY29uc3QgQ29sb3IgdG9v
bHRpcEJvcmRlckNvbG9yKENvbG9yOjpibGFjayk7CiAgICAgc3RhdGljIGNvbnN0IENvbG9yIHRv
b2x0aXBGb250Q29sb3IoQ29sb3I6OmJsYWNrKTsKKyAgICBGb250Q2FjaGVQdXJnZVByZXZlbnRl
ciBmb250Q2FjaGVQdXJnZVByZXZlbnRlcjsKIAogICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxFbGVtZW50Kj4obm9kZSk7CiAgICAgYm9vbCBpc1hIVE1MID0gZWxlbWVudC0+ZG9j
dW1lbnQoKS0+aXNYSFRNTERvY3VtZW50KCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNB
TGF5ZXJXaW5JbnRlcm5hbC5jcHAJKHJldmlzaW9uIDg4NjQ5KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbkludGVybmFsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXll
cldpbkludGVybmFsLmgiCiAKICNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhY2hl
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyLmgiCiAjaW5jbHVkZSAiVGV4dFJ1bi5oIgog
I2luY2x1ZGUgPFF1YXJ0ekNvcmUvQ0FDRkxheWVyLmg+CkBAIC05Myw2ICs5NCw4IEBAIHZvaWQg
UGxhdGZvcm1DQUxheWVyV2luSW50ZXJuYWw6OmRpc3BsYXkKICNlbmRpZgogCiAgICAgaWYgKG93
bmVyKCktPm93bmVyKCktPnBsYXRmb3JtQ0FMYXllclNob3dSZXBhaW50Q291bnRlcigpKSB7Cisg
ICAgICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOwor
CiAgICAgICAgIFN0cmluZyB0ZXh0ID0gU3RyaW5nOjpudW1iZXIob3duZXIoKS0+b3duZXIoKS0+
cGxhdGZvcm1DQUxheWVySW5jcmVtZW50UmVwYWludENvdW50KCkpOwogCiAgICAgICAgIENHQ29u
dGV4dFNhdmVHU3RhdGUoY29udGV4dCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNw
bGF5LmNwcAkocmV2aXNpb24gODg2NDkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9jYy9DQ0hlYWRzVXBEaXNwbGF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjksNiArMjksNyBAQAogCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNEQ2hyb21pdW0uaCIKICNpbmNs
dWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCiAjaW5jbHVkZSAiRm9udERlc2Ny
aXB0aW9uLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0QuaCIKICNpbmNsdWRlICJMYXll
ckNocm9taXVtLmgiCkBAIC0xNDUsNiArMTQ2LDggQEAgdm9pZCBDQ0hlYWRzVXBEaXNwbGF5Ojpk
cmF3KCkKIAogdm9pZCBDQ0hlYWRzVXBEaXNwbGF5OjpkcmF3SHVkQ29udGVudHMoR3JhcGhpY3ND
b250ZXh0KiBjdHgsIGNvbnN0IEludFNpemUmIGh1ZFNpemUpCiB7CisgICAgRm9udENhY2hlUHVy
Z2VQcmV2ZW50ZXIgZm9udENhY2hlUHVyZ2VQcmV2ZW50ZXI7CisKICAgICBpZiAobV9zaG93UGxh
dGZvcm1MYXllclRyZWUpIHsKICAgICAgICAgY3R4LT5zZXRGaWxsQ29sb3IoQ29sb3IoMCwgMCwg
MCwgMTkyKSwgQ29sb3JTcGFjZURldmljZVJHQik7CiAgICAgICAgIGN0eC0+ZmlsbFJlY3QoRmxv
YXRSZWN0KDAsIDAsIGh1ZFNpemUud2lkdGgoKSwgaHVkU2l6ZS5oZWlnaHQoKSkpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL0RyYWdJbWFnZU1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvRHJhZ0ltYWdlTWFjLm1tCShyZXZpc2lvbiA4
ODY0OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9EcmFnSW1hZ2VNYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQog
I2ltcG9ydCAiQ2FjaGVkSW1hZ2UuaCIKICNpbXBvcnQgIkZvbnQuaCIKKyNpbXBvcnQgIkZvbnRD
YWNoZS5oIgogI2ltcG9ydCAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW1wb3J0ICJGb250U2VsZWN0
b3IuaCIKICNpbXBvcnQgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtMTU2LDYgKzE1Nyw4IEBAIHN0
YXRpYyBmbG9hdCB3aWR0aFdpdGhGb250KE5TU3RyaW5nICpzdHIKICAgICBbc3RyaW5nIGdldENo
YXJhY3RlcnM6YnVmZmVyLmRhdGEoKV07CiAgICAgCiAgICAgaWYgKGNhblVzZUZhc3RSZW5kZXJl
cihidWZmZXIuZGF0YSgpLCBsZW5ndGgpKSB7CisgICAgICAgIEZvbnRDYWNoZVB1cmdlUHJldmVu
dGVyIGZvbnRDYWNoZVB1cmdlUHJldmVudGVyOworCiAgICAgICAgIEZvbnQgd2ViQ29yZUZvbnQo
Rm9udFBsYXRmb3JtRGF0YShmb250LCBbZm9udCBwb2ludFNpemVdKSwgIVtbTlNHcmFwaGljc0Nv
bnRleHQgY3VycmVudENvbnRleHRdIGlzRHJhd2luZ1RvU2NyZWVuXSk7CiAgICAgICAgIFRleHRS
dW4gcnVuKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7CiAgICAgICAgIHJldHVybiB3ZWJDb3JlRm9u
dC53aWR0aChydW4pOwpAQCAtMTc5LDYgKzE4Miw4IEBAIHN0YXRpYyB2b2lkIGRyYXdBdFBvaW50
KE5TU3RyaW5nICpzdHJpbmcKICAgICBbc3RyaW5nIGdldENoYXJhY3RlcnM6YnVmZmVyLmRhdGEo
KV07CiAgICAgCiAgICAgaWYgKGNhblVzZUZhc3RSZW5kZXJlcihidWZmZXIuZGF0YSgpLCBsZW5n
dGgpKSB7CisgICAgICAgIEZvbnRDYWNoZVB1cmdlUHJldmVudGVyIGZvbnRDYWNoZVB1cmdlUHJl
dmVudGVyOworCiAgICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgaXMgYSBoYWxmLWFzc2VkIGF0dGVt
cHQgdG8gbWF0Y2ggQXBwS2l0J3Mgcm91bmRpbmcgcnVsZXMgZm9yIGRyYXdBdFBvaW50LgogICAg
ICAgICAvLyBJdCdzIHByb2JhYmx5IGluY29ycmVjdCBmb3IgaGlnaCBEUEkuCiAgICAgICAgIC8v
IElmIHlvdSBjaGFuZ2UgdGhpcywgYmUgc3VyZSB0byB0ZXN0IGFsbCB0aGUgdGV4dCBkcmF3biB0
aGlzIHdheSBpbiBTYWZhcmksIGluY2x1ZGluZwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiA4ODY0OSkKKysrIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYg
KzI5LDcgQEAKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NTdHls
ZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgi
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKQEAgLTE0Myw2ICsxNDQsOCBAQCB2b2lkIFJlbmRlck1lbnVMaXN0Ojp1cGRh
dGVPcHRpb25zV2lkdGgoCiAgICAgZmxvYXQgbWF4T3B0aW9uV2lkdGggPSAwOwogICAgIGNvbnN0
IFZlY3RvcjxFbGVtZW50Kj4mIGxpc3RJdGVtcyA9IHRvU2VsZWN0RWxlbWVudChzdGF0aWNfY2Fz
dDxFbGVtZW50Kj4obm9kZSgpKSktPmxpc3RJdGVtcygpOwogICAgIGludCBzaXplID0gbGlzdEl0
ZW1zLnNpemUoKTsgICAgCisgICAgRm9udENhY2hlUHVyZ2VQcmV2ZW50ZXIgZm9udENhY2hlUHVy
Z2VQcmV2ZW50ZXI7CisKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAg
ICAgICBFbGVtZW50KiBlbGVtZW50ID0gbGlzdEl0ZW1zW2ldOwogICAgICAgICBPcHRpb25FbGVt
ZW50KiBvcHRpb25FbGVtZW50ID0gdG9PcHRpb25FbGVtZW50KGVsZW1lbnQpOwo=
</data>
<flag name="review"
          id="90791"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>