<?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>174760</bug_id>
          
          <creation_ts>2017-07-23 07:10:23 -0700</creation_ts>
          <short_desc>[GTK] Icon database error and crash</short_desc>
          <delta_ts>2017-07-24 23:39:40 -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>WebKitGTK</component>
          <version>Other</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Major</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Catanzaro">mcatanzaro</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>beidson</cc>
    
    <cc>berto</cc>
    
    <cc>bugs-noreply</cc>
    
    <cc>buildbot</cc>
    
    <cc>cgarcia</cc>
    
    <cc>gustavo</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1331430</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-07-23 07:10:23 -0700</bug_when>
    <thetext>Seems the icon database is broken after the recent changes. Every time I start Epiphany I get this lovely warning:

ERROR: Failed to start load for icon at url /favicon.ico
../../Source/WebCore/loader/icon/IconLoader.cpp(96) : void WebCore::IconLoader::startLoading()

Now, right click on any page and click Save As. The UI process will crash. (This might be two different bugs.)

#0  0x00007f6ef51168f9 in WTFCrash ()
    at ../../Source/WTF/wtf/Assertions.cpp:278
No locals.
#1  0x00007f6efcfdb8fc in (anonymous namespace)::TimerBase::stop (
    this=0x7f6ee2a6f108) at ../../Source/WebCore/platform/Timer.cpp:214
        __PRETTY_FUNCTION__ = &quot;void WebCore::TimerBase::stop()&quot;
#2  0x00007f6efcfdb7b2 in (anonymous namespace)::TimerBase::~TimerBase (
    this=0x7f6ee2a6f108, __in_chrg=&lt;optimized out&gt;)
    at ../../Source/WebCore/platform/Timer.cpp:197
No locals.
#3  0x00007f6efb99042c in (anonymous namespace)::Timer::~Timer (
    this=0x7f6ee2a6f108, __in_chrg=&lt;optimized out&gt;)
    at ../../Source/WebCore/platform/Timer.h:116
No locals.
#4  0x00007f6efd0b489c in (anonymous namespace)::Image::~Image (
    this=0x7f6ee2a6f0e8, __in_chrg=&lt;optimized out&gt;)
    at ../../Source/WebCore/platform/graphics/Image.cpp:55
No locals.
#5  0x00007f6efd038382 in (anonymous namespace)::BitmapImage::~BitmapImage (
    this=0x7f6ee2a6f0e8, __in_chrg=&lt;optimized out&gt;)
    at ../../Source/WebCore/platform/graphics/BitmapImage.cpp:61
No locals.
#6  0x00007f6efd03839e in (anonymous namespace)::BitmapImage::~BitmapImage (
    this=0x7f6ee2a6f0e8, __in_chrg=&lt;optimized out&gt;)
    at ../../Source/WebCore/platform/graphics/BitmapImage.cpp:67
No locals.
#7  0x00007f6efba9b1de in WTF::RefCounted&lt;WebCore::Image&gt;::deref (
    this=0x7f6ee2a6f0f0) at ../../Source/WTF/wtf/RefCounted.h:145
No locals.
#8  0x00007f6efba98cbc in WTF::derefIfNotNull&lt;WebCore::Image&gt; (
    ptr=0x7f6ee2a6f0e8) at ../../Source/WTF/wtf/RefPtr.h:45
No locals.
#9  0x00007f6efba967a5 in WTF::RefPtr&lt;WebCore::Image&gt;::~RefPtr (
    this=0x7f6ee2af3888, __in_chrg=&lt;optimized out&gt;)
    at ../../Source/WTF/wtf/RefPtr.h:69
No locals.
#10 0x00007f6efbf334eb in (anonymous namespace)::IconDatabase::IconRecord::~IconRecord (this=0x7f6ee2af3870, __in_chrg=&lt;optimized out&gt;)
    at ../../Source/WebKit/UIProcess/API/glib/IconDatabase.cpp:105
No locals.
#11 0x00007f6efbf41fe9 in WTF::RefCounted&lt;WebKit::IconDatabase::IconRecord&gt;::deref (this=0x7f6ee2af3870) at ../../Source/WTF/wtf/RefCounted.h:145
No locals.
#12 0x00007f6efbf420db in WTF::derefIfNotNull&lt;WebKit::IconDatabase::IconRecord&gt;
    (ptr=0x7f6ee2af3870) at ../../Source/WTF/wtf/RefPtr.h:45
No locals.
#13 0x00007f6efbf404e5 in WTF::RefPtr&lt;WebKit::IconDatabase::IconRecord&gt;::~RefPtr (this=0x7f6ee2a74890, __in_chrg=&lt;optimized out&gt;)
    at ../../Source/WTF/wtf/RefPtr.h:69
No locals.
#14 0x00007f6efbf337f9 in (anonymous namespace)::IconDatabase::PageURLRecord::~PageURLRecord (this=0x7f6ee2a74888, __in_chrg=&lt;optimized out&gt;)
    at ../../Source/WebKit/UIProcess/API/glib/IconDatabase.cpp:164
No locals.
#15 0x00007f6efbf352ba in (anonymous namespace)::IconDatabase::performReleaseIconForPageURL (this=0x7f6ee2acc000, pageURLOriginal=..., releaseCount=1)
    at ../../Source/WebKit/UIProcess/API/glib/IconDatabase.cpp:536
        __PRETTY_FUNCTION__ = &quot;void WebKit::IconDatabase::performReleaseIconForPageURL(const WTF::String&amp;, int)&quot;
        pageRecord = 0x7f6ee2a74888
        iconRecord = 0x7f6ee2af3870
#16 0x00007f6efbf39451 in (anonymous namespace)::IconDatabase::performPendingRetainAndReleaseOperations (this=0x7f6ee2acc000)
    at ../../Source/WebKit/UIProcess/API/glib/IconDatabase.cpp:1369
        entry = @0x7f6ee2aa4690: {key = {m_impl = {
              static isRefPtr = &lt;optimized out&gt;, m_ptr = 0x7f6ee2afc780}}, 
          value = 1}
        __for_range = @0x7f6e92a9e920: {m_impl = {m_impl = {
              static m_maxLoad = 2, static m_minLoad = 6, 
              m_table = 0x7f6ee2aa4680, m_tableSize = 8, m_tableSizeMask = 7, 
              m_keyCount = 1, m_deletedCount = 0, 
              m_iterators = 0x7f6e92a9e8e8, 
              m_mutex = std::unique_ptr&lt;WTF::Lock&gt; containing 0x7f6ee2aba088}}}
        __for_begin = {&lt;std::iterator&lt;std::forward_iterator_tag, WTF::KeyValuePair&lt;WTF::String, unsigned int&gt;, long, WTF::KeyValuePair&lt;WTF::String, unsigned int&gt;*, WTF::KeyValuePair&lt;WTF::String, unsigned int&gt;&amp;&gt;&gt; = {&lt;No data fields&gt;}, 
          m_impl = {&lt;std::iterator&lt;std::forward_iterator_tag, WTF::KeyValuePair&lt;WTF::String, unsigned int&gt;, long, WTF::KeyValuePair&lt;WTF::String, unsigned int&gt;*, WTF::KeyValuePair&lt;WTF::String, unsigned int&gt;&amp;&gt;&gt; = {&lt;No data fields&gt;}, 
            m_iterator = {&lt;std::iterator&lt;std::forward_iterator_tag, WTF::KeyValuePair&lt;WTF::String, unsigned int&gt;, long, WTF::KeyValuePair&lt;WTF::String, unsigned int&gt; const*, WTF::KeyValuePair&lt;WTF::String, unsigned int&gt; const&amp;&gt;&gt; = {&lt;No data fields&gt;}, m_position = 0x7f6ee2aa4690, m_endPosition = 0x7f6ee2aa4700, 
              m_table = 0x7f6e92a9e920, m_next = 0x0, 
              m_previous = 0x7f6e92a9e8e8}}}
        __for_end = {&lt;std::iterator&lt;std::forward_iterator_tag, WTF::KeyValuePair&lt;WTF::String, unsigned int&gt;, long, WTF::KeyValuePair&lt;WTF::String, unsigned int&gt;*, WTF::KeyValuePair&lt;WTF::String, unsigned int&gt;&amp;&gt;&gt; = {&lt;No data fields&gt;}, 
          m_impl = {&lt;std::iterator&lt;std::forward_iterator_tag, WTF::KeyValuePair&lt;WTF::String, unsigned int&gt;, long, WTF::KeyValuePair&lt;WTF::String, unsigned int&gt;*, WTF::KeyValuePair&lt;WTF::String, unsigned int&gt;&amp;&gt;&gt; = {&lt;No data fields&gt;}, 
            m_iterator = {&lt;std::iterator&lt;std::forward_iterator_tag, WTF::KeyValuePair&lt;WTF::String, unsigned int&gt;, long, WTF::KeyValuePair&lt;WTF::String, unsigned int&gt; const*, WTF::KeyValuePair&lt;WTF::String, unsigned int&gt; const&amp;&gt;&gt; = {&lt;No data fields&gt;}, m_position = 0x7f6ee2aa4700, m_endPosition = 0x7f6ee2aa4700, 
              m_table = 0x7f6e92a9e920, m_next = 0x7f6e92a9e8b8, 
              m_previous = 0x0}}}
        __PRETTY_FUNCTION__ = &quot;void WebKit::IconDatabase::performPendingRetainAndReleaseOperations()&quot;
        toRetain = {m_impl = {m_impl = {static m_maxLoad = 2, 
              static m_minLoad = 6, m_table = 0x0, m_tableSize = 0, 
              m_tableSizeMask = 0, m_keyCount = 0, m_deletedCount = 0, 
              m_iterators = 0x0, 
              m_mutex = std::unique_ptr&lt;WTF::Lock&gt; containing 0x7f6ee2aba080}}}
        toRelease = {m_impl = {m_impl = {static m_maxLoad = 2, 
              static m_minLoad = 6, m_table = 0x7f6ee2aa4680, m_tableSize = 8, 
              m_tableSizeMask = 7, m_keyCount = 1, m_deletedCount = 0, 
              m_iterators = 0x7f6e92a9e8e8, 
              m_mutex = std::unique_ptr&lt;WTF::Lock&gt; containing 0x7f6ee2aba088}}}
#17 0x00007f6efbf38f3a in (anonymous namespace)::IconDatabase::syncThreadMainLoop (this=0x7f6ee2acc000)
    at ../../Source/WebKit/UIProcess/API/glib/IconDatabase.cpp:1276
        locker = {&lt;WTF::AbstractLocker&gt; = {&lt;No data fields&gt;}, 
          m_lockable = 0x7f6ee2acc064}
        timeStamp = 3175.4553249999999
        didAnyWork = false
        newstamp = 3170.4540929999998
        __PRETTY_FUNCTION__ = &quot;void WebKit::IconDatabase::syncThreadMainLoop()&quot;
#18 0x00007f6efbf37681 in (anonymous namespace)::IconDatabase::iconDatabaseSyncThread (this=0x7f6ee2acc000)
    at ../../Source/WebKit/UIProcess/API/glib/IconDatabase.cpp:953
        __PRETTY_FUNCTION__ = &quot;void WebKit::IconDatabase::iconDatabaseSyncThread()&quot;
        startTime = 3006.9423579999998
        journalFilename = {m_impl = {static isRefPtr = &lt;optimized out&gt;, 
            m_ptr = 0x7f6ee2aca000}}
        timeStamp = 3006.9435509999998
        newStamp = 3006.9436879999998
#19 0x00007f6efbf33a59 in (anonymous namespace)::IconDatabase::&lt;lambda()&gt;::operator()(void) const (__closure=0x7f6ee2af8098)
    at ../../Source/WebKit/UIProcess/API/glib/IconDatabase.cpp:224
        this = 0x7f6ee2acc000
#20 0x00007f6efbf3f6c8 in WTF::Function&lt;void()&gt;::CallableWrapper&lt;WebKit::IconDatabase::open(const WTF::String&amp;, const WTF::String&amp;)::&lt;lambda()&gt; &gt;::call(void) (
    this=0x7f6ee2af8090) at ../../Source/WTF/wtf/Function.h:102
No locals.
#21 0x00007f6efb94cb2b in WTF::Function&lt;void()&gt;::operator()(void) const (
    this=0x7f6e92a9eb20) at ../../Source/WTF/wtf/Function.h:56
No locals.
#22 0x00007f6ef51383de in WTF::threadEntryPoint (contextData=0x7f6ee2af44d0)
    at ../../Source/WTF/wtf/Threading.cpp:101
        context = 0x7f6ee2af44d0
        entryPoint = {
          m_callableWrapper = std::unique_ptr&lt;WTF::Function&lt;void()&gt;::CallableWrapperBase&gt; containing 0x7f6ee2af8090}
#23 0x00007f6ef5178314 in WTF::wtfThreadEntryPoint (param=0x7f6ee2afe0c0)
    at ../../Source/WTF/wtf/ThreadingPthreads.cpp:209
        invocation = std::unique_ptr&lt;WTF::ThreadFunctionInvocation&gt; containing 0x7f6ee2afe0c0
#24 0x00007f6ef105d36d in start_thread (arg=0x7f6e92a9f700)
    at pthread_create.c:456
        __res = &lt;optimized out&gt;
        pd = 0x7f6e92a9f700
        now = &lt;optimized out&gt;
        unwind_buf = {cancel_jmp_buf = {{jmp_buf = {140112883742464, 
                4941255678535664290, 0, 140733047339136, 140112883743168, 0, 
                -5021521763199090014, -5021724863860047198}, 
              mask_was_saved = 0}}, priv = {pad = {0x0, 0x0, 0x0, 0x0}, 
            data = {prev = 0x0, cleanup = 0x0, canceltype = 0}}}
        not_first_call = &lt;optimized out&gt;
        pagesize_m1 = &lt;optimized out&gt;
        sp = &lt;optimized out&gt;
        freesize = &lt;optimized out&gt;
        __PRETTY_FUNCTION__ = &quot;start_thread&quot;
#25 0x00007f6f03b59b8f in clone ()
    at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97
No locals.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331433</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-07-23 07:25:02 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #0)
&gt; Now, right click on any page and click Save As. The UI process will crash.
&gt; (This might be two different bugs.)

Actually you don&apos;t need to do anything. Just load any page. It will hit that crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331435</commentid>
    <comment_count>2</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-07-23 10:18:17 -0700</bug_when>
    <thetext>The assertion in the ~TimerBase destructor is:
    ASSERT(canAccessThreadLocalDataForThread(m_thread));

So a Timer is getting created on one thread but destroyed on another thread.

It&apos;s not immediately clear to me how my recent changes changed this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331436</commentid>
    <comment_count>3</comment_count>
    <who name="Brady Eidson">beidson</who>
    <bug_when>2017-07-23 10:19:28 -0700</bug_when>
    <thetext>That said, this is the sync thread, and it&apos;s super surprising to see IconRecords destroyed (and therefore WebCore::Images destroyed) on a background thread.

That&apos;s definitely not okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331556</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-07-24 00:57:07 -0700</bug_when>
    <thetext>I think this problem has always existed, but before removing the code, history items were retaining icons preventing them from being deleted in some cases. IconRecord and PageURLRecord objects can be created and destroyed either in sync or main thread. The problem seems to be the frame timer of the BitmapImage, that is not even used nor needed at all. We currently retain icons when they are returned by webkit_favicon_database_get_favicon(), but we release them if we fail to get them. I guess this crash happens for a page that doesn&apos;t have a favicon. I don&apos;t think it&apos;s worth trying to fix the IconDatabase mess, because we will eventually replace it, hopefully during the next cycle. So, for now, I think we can simple change IconRecord::setImageData() to not create the image if the given data is nullptr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331557</commentid>
    <comment_count>5</comment_count>
      <attachid>316273</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-07-24 01:11:20 -0700</bug_when>
    <thetext>Created attachment 316273
Patch

Could you try this patch, Michael?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331558</commentid>
    <comment_count>6</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-07-24 01:13:59 -0700</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331607</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-07-24 07:56:07 -0700</bug_when>
    <thetext>(In reply to Carlos Garcia Campos from comment #4)
&gt; I don&apos;t think it&apos;s worth trying to fix the IconDatabase mess, because we will
&gt; eventually replace it, hopefully during the next cycle.

I&apos;d be interested in seeing a plan for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331608</commentid>
    <comment_count>8</comment_count>
      <attachid>316273</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-07-24 08:04:23 -0700</bug_when>
    <thetext>Comment on attachment 316273
Patch

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

I&apos;m not sure I understand this fix. Is your goal to prevent the crash by ensuring that IconDatabase::performReleaseIconForPageURL is never called ever? That is quite a hack, but I think that&apos;s fine as you say you&apos;re planning to delete all this code, and I&apos;m confident that will happen sooner rather than later. The IconDatabase has always been a mess anyway.

I will test the change to see if it works... building now.

&gt; Source/WebKit/UIProcess/API/glib/IconDatabase.cpp:123
&gt;      // It&apos;s okay to delete the raw image here. Any existing clients using this icon will be
&gt;      // managing an image that was created with a copy of this raw image data.

Um... I&apos;m not sure if this comment is really supposed to be in this function at all... but I would have added your new conditional above it rather than below it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331610</commentid>
    <comment_count>9</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-07-24 08:21:48 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #7)
&gt; (In reply to Carlos Garcia Campos from comment #4)
&gt; &gt; I don&apos;t think it&apos;s worth trying to fix the IconDatabase mess, because we will
&gt; &gt; eventually replace it, hopefully during the next cycle.
&gt; 
&gt; I&apos;d be interested in seeing a plan for this.

The plan is to use a new database format that supports multiple icons and sizes per page URL, and modernize and simplify the code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331612</commentid>
    <comment_count>10</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-07-24 08:25:29 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #8)
&gt; Comment on attachment 316273 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=316273&amp;action=review
&gt; 
&gt; I&apos;m not sure I understand this fix. Is your goal to prevent the crash by
&gt; ensuring that IconDatabase::performReleaseIconForPageURL is never called
&gt; ever?

No, but when this is called no Image will be deleted.

&gt; That is quite a hack, but I think that&apos;s fine as you say you&apos;re
&gt; planning to delete all this code, 

It&apos;s a side effect, but the change is good in any case, it avoids creating an image for nothing when the page doesn&apos;t have a favicon.

&gt; and I&apos;m confident that will happen sooner
&gt; rather than later.

Not sure how soon it will be, but definitely not in this release cycle.

&gt; The IconDatabase has always been a mess anyway.

Indeed.

&gt; I will test the change to see if it works... building now.

Thanks! I&apos;ll make a release tomorrow.

&gt; &gt; Source/WebKit/UIProcess/API/glib/IconDatabase.cpp:123
&gt; &gt;      // It&apos;s okay to delete the raw image here. Any existing clients using this icon will be
&gt; &gt;      // managing an image that was created with a copy of this raw image data.
&gt; 
&gt; Um... I&apos;m not sure if this comment is really supposed to be in this function
&gt; at all... but I would have added your new conditional above it rather than
&gt; below it.

No, the data is removed when the image is destroyed, so setting it to nullptr would destroy any previous data.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331615</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2017-07-24 08:47:02 -0700</bug_when>
    <thetext>(In reply to Michael Catanzaro from comment #8)
&gt; I will test the change to see if it works... building now.

Your patch fixes the crash I posted above.

It does not fix this error:

ERROR: Failed to start load for icon at url /favicon.ico
../../Source/WebCore/loader/icon/IconLoader.cpp(82) : void WebCore::IconLoader::startLoading()

I will file a new bug for that.

There is also an icon database crash on exit. I will file a new bug for that, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1331896</commentid>
    <comment_count>12</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-07-24 23:39:40 -0700</bug_when>
    <thetext>Committed r219861: &lt;http://trac.webkit.org/changeset/219861&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>316273</attachid>
            <date>2017-07-24 01:11:20 -0700</date>
            <delta_ts>2017-07-24 08:47:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk-icon-database-crash.diff</filename>
            <type>text/plain</type>
            <size>2404</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggZmVhNjhlMTE1OTAuLjMxYTg2MzkzOTFiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE5IEBACisyMDE3LTA3LTI0ICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKworICAgICAgICBbR1RLXSBJY29uIGRhdGFiYXNlIGVycm9yIGFuZCBjcmFzaAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc0NzYwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGNyYXNoIGlz
IGEgZGVidWcgQVNTRVJUIHRoYXQgaGFwcGVucyB3aGVuIHRoZSBJY29uUmVjb3JkIGltYWdlIGlz
IGNyZWF0ZWQgaW4gb25lIHRocmVhZCBhbmQgZGVzdHJveWVkIGluCisgICAgICAgIGFub3RoZXIg
b25lLiBJY29uRGF0YWJhc2UgY3JlYXRlcyBhbmQgZGVzdHJveXMgSWNvblJlY29yZCBvYmplY3Rz
IGluIGJvdGggZGF0YWJhc2UgYW5kIG1haW4gdGhyZWFkLiBUaGUKKyAgICAgICAgSWNvblJlY29y
ZCBpcyBkZXN0cm95ZWQgd2hlbiB0aGUgaWNvbiBpcyBubyBsb25nZXIgcmV0YWluZWQsIGFuZCB3
ZSBvbmx5IHJlbGVhc2UgaWNvbnMgd2hlbiB3ZSBmYWlsIHRvIGdldCB0aGUKKyAgICAgICAgaW1h
Z2UgZGF0YSAoaW5jbHVkaW5nIHBhZ2VzIHRoYXQgZG9uJ3QgaGF2ZSBhIGZhdmljb24pLiBXZSBj
YW4gcHJldmVudCB0aGlzIGNyYXNoIGZyb20gaGFwcGVuaW5nIGlmIHdlIGVuc3VyZSB3ZQorICAg
ICAgICBuZXZlciBjcmVhdGUgYW4gSW1hZ2UgZm9yIGFuIEljb25SZWNvcmQgd2hlbiB0aGUgZ2l2
ZW4gaW1hZ2UgZGF0YSBpcyBudWxscHRyLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9nbGli
L0ljb25EYXRhYmFzZS5jcHA6CisgICAgICAgIChXZWJLaXQ6Okljb25EYXRhYmFzZTo6SWNvblJl
Y29yZDo6c2V0SW1hZ2VEYXRhKToKKwogMjAxNy0wNy0yMyAgQ2FybG9zIEdhcmNpYSBDYW1wb3Mg
IDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZC4gUkVHUkVTU0lPTihy
MjE5NzEzKTogW0dUS11bV1BFXSBGaXggZGVmYXVsdCBmYXZpY29uIGRhdGFiYXNlIHBhdGNoLgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL2dsaWIvSWNvbkRhdGFiYXNl
LmNwcCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFzZS5jcHAK
aW5kZXggNjYwMTlmNGVmNTAuLmM2YWIyODZjMTY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvZ2xpYi9JY29uRGF0YWJhc2UuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9nbGliL0ljb25EYXRhYmFzZS5jcHAKQEAgLTExNywxNyArMTE3LDIwIEBA
IEltYWdlKiBJY29uRGF0YWJhc2U6Okljb25SZWNvcmQ6OmltYWdlKGNvbnN0IEludFNpemUmKQog
CiB2b2lkIEljb25EYXRhYmFzZTo6SWNvblJlY29yZDo6c2V0SW1hZ2VEYXRhKFJlZlB0cjxTaGFy
ZWRCdWZmZXI+JiYgZGF0YSkKIHsKKyAgICBtX2RhdGFTZXQgPSB0cnVlOworCiAgICAgLy8gSXQn
cyBva2F5IHRvIGRlbGV0ZSB0aGUgcmF3IGltYWdlIGhlcmUuIEFueSBleGlzdGluZyBjbGllbnRz
IHVzaW5nIHRoaXMgaWNvbiB3aWxsIGJlCiAgICAgLy8gbWFuYWdpbmcgYW4gaW1hZ2UgdGhhdCB3
YXMgY3JlYXRlZCB3aXRoIGEgY29weSBvZiB0aGlzIHJhdyBpbWFnZSBkYXRhLgotICAgIG1faW1h
Z2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7CisgICAgaWYgKCFkYXRhLT5zaXplKCkpIHsKKyAg
ICAgICAgbV9pbWFnZSA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAKLSAgICAv
LyBDb3B5IHRoZSBwcm92aWRlZCBkYXRhIGludG8gdGhlIGJ1ZmZlciBvZiB0aGUgbmV3IEltYWdl
IG9iamVjdC4KKyAgICBtX2ltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwogICAgIGlmICht
X2ltYWdlLT5zZXREYXRhKFdURk1vdmUoZGF0YSksIHRydWUpIDwgRW5jb2RlZERhdGFTdGF0dXM6
OlNpemVBdmFpbGFibGUpIHsKICAgICAgICAgTE9HKEljb25EYXRhYmFzZSwgIk1hbnVhbCBpbWFn
ZSBkYXRhIGZvciBpY29uVVJMICclcycgRkFJTEVEIC0gaXQgd2FzIHByb2JhYmx5IGludmFsaWQg
aW1hZ2UgZGF0YSIsIG1faWNvblVSTC5hc2NpaSgpLmRhdGEoKSk7CiAgICAgICAgIG1faW1hZ2Ug
PSBudWxscHRyOwogICAgIH0KLQotICAgIG1fZGF0YVNldCA9IHRydWU7CiB9CiAKIHZvaWQgSWNv
bkRhdGFiYXNlOjpJY29uUmVjb3JkOjpsb2FkSW1hZ2VGcm9tUmVzb3VyY2UoY29uc3QgY2hhciog
cmVzb3VyY2UpCg==
</data>
<flag name="review"
          id="336958"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>