<?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>141641</bug_id>
          
          <creation_ts>2015-02-16 05:08:32 -0800</creation_ts>
          <short_desc>[GTK] WebKitFrame objects are never released</short_desc>
          <delta_ts>2015-02-16 23:34:45 -0800</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>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>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>141558</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>gustavo</cc>
    
    <cc>svillar</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1069414</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-02-16 05:08:32 -0800</bug_when>
    <thetext>We relay on willDestroyFrame callback of WKBundlePageLoaderClient, but this callback is never emitted and can&apos;t be emitted. It was my fault, I thought I had tested it when I added it, but the thing is that willDestroyFrame is called from WebFrameLoaderClient::frameLoaderDestroyed(), but at that point the frame has already been detached from the page, so WebFrame::page() always returns nullptr at that point. But even if we had a WebPage pointer at that time, when the page is closed, the loader client is reset before FrameLoader::detachFromParent() si called, so when WebFrameLoaderClient::frameLoaderDestroyed() is called then loader client doesn&apos;t have callbacks attached.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069415</commentid>
    <comment_count>1</comment_count>
      <attachid>246647</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-02-16 05:15:23 -0800</bug_when>
    <thetext>Created attachment 246647
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069438</commentid>
    <comment_count>2</comment_count>
      <attachid>246647</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-02-16 08:12:45 -0800</bug_when>
    <thetext>Comment on attachment 246647
Patch

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

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:81
&gt; +class WebKitFrameWrapper final: public FrameDestructionObserver {

I wonder if it makes sense to simply add the FrameDestructionObserver as a member of WebKitFrame? I worry about the possibility of introducing reference cycles, by wrapping the frame itself.

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:123
&gt; +static void webkitFrameDestroy(WebFrame* webFrame)
&gt; +{
&gt; +    webFrameMap().remove(webFrame);

This should probably be called webkitFrameDestroyed or webkitFrameDestroyedCallback, I think. It doesn&apos;t destroy the frame, it just responds to the destruction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069442</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-02-16 08:28:04 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 246647 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=246647&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:81
&gt; &gt; +class WebKitFrameWrapper final: public FrameDestructionObserver {
&gt; 
&gt; I wonder if it makes sense to simply add the FrameDestructionObserver as a
&gt; member of WebKitFrame? I worry about the possibility of introducing
&gt; reference cycles, by wrapping the frame itself.

There&apos;s no possibility of ref cycles, because the only reference of WebKitFrame is owned by the wrapper that is deleted when the WebCore::Frame is destroyed. That hasn&apos;t actually changed, since current the only references is owned by the WebFrameMap. The only difference is that now the WebFrameMap contains a WebKitFrameWrapper instead of a WebKitFrame directly. 
The destructor is in WebKitWebPage because frames are created in WebKitWebPage, which is where the WebFrameMap is.

&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:123
&gt; &gt; +static void webkitFrameDestroy(WebFrame* webFrame)
&gt; &gt; +{
&gt; &gt; +    webFrameMap().remove(webFrame);
&gt; 
&gt; This should probably be called webkitFrameDestroyed or
&gt; webkitFrameDestroyedCallback, I think. It doesn&apos;t destroy the frame, it just
&gt; responds to the destruction.

It&apos;s confusing, it responds to a WebCore::Frame destruction to destroy the WebKitFrame object. But I agree it&apos;s confusing, webFrameDestroyed() could work better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069444</commentid>
    <comment_count>4</comment_count>
      <attachid>246647</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-02-16 08:38:54 -0800</bug_when>
    <thetext>Comment on attachment 246647
Patch

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

&gt;&gt;&gt; Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:123
&gt;&gt;&gt; +    webFrameMap().remove(webFrame);
&gt;&gt; 
&gt;&gt; This should probably be called webkitFrameDestroyed or webkitFrameDestroyedCallback, I think. It doesn&apos;t destroy the frame, it just responds to the destruction.
&gt; 
&gt; It&apos;s confusing, it responds to a WebCore::Frame destruction to destroy the WebKitFrame object. But I agree it&apos;s confusing, webFrameDestroyed() could work better.

webFrameDestroyed sounds like a good name as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069498</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-02-16 11:03:10 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 246647 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=246647&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/WebKit2/WebProcess/InjectedBundle/API/gtk/WebKitWebPage.cpp:123
&gt; &gt;&gt;&gt; +    webFrameMap().remove(webFrame);
&gt; &gt;&gt; 
&gt; &gt;&gt; This should probably be called webkitFrameDestroyed or webkitFrameDestroyedCallback, I think. It doesn&apos;t destroy the frame, it just responds to the destruction.
&gt; &gt; 
&gt; &gt; It&apos;s confusing, it responds to a WebCore::Frame destruction to destroy the WebKitFrame object. But I agree it&apos;s confusing, webFrameDestroyed() could work better.
&gt; 
&gt; webFrameDestroyed sounds like a good name as well.

Ok, that&apos;s what I proposed, so any other concern?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069586</commentid>
    <comment_count>6</comment_count>
      <attachid>246647</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2015-02-16 14:13:00 -0800</bug_when>
    <thetext>Comment on attachment 246647
Patch

No, this looks okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069773</commentid>
    <comment_count>7</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-02-16 23:06:26 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 246647 [details]
&gt; Patch
&gt; 
&gt; No, this looks okay.

Thank you!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069783</commentid>
    <comment_count>8</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2015-02-16 23:34:45 -0800</bug_when>
    <thetext>Committed r180211: &lt;http://trac.webkit.org/changeset/180211&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246647</attachid>
            <date>2015-02-16 05:15:23 -0800</date>
            <delta_ts>2015-02-16 14:13:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-frames-leaked.diff</filename>
            <type>text/plain</type>
            <size>11092</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCBiNTMzMTc4Li5jMmNmYmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQg
QEAKKzIwMTUtMDItMTYgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIFdlYktpdEZyYW1lIG9iamVjdHMgYXJlIG5ldmVyIHJlbGVhc2Vk
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE2NDEK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVc2UgYSBG
cmFtZURlc3RydWN0aW9uT2JzZXJ2ZXIgZGVyaXZlZCBjbGFzcyB0byB3cmFwIG91cgorICAgICAg
ICBXZWJLaXRGcmFtZSBvYmplY3RzIGFuZCBkZWxldGUgdGhlbSB3aGVuIHRoZSBmcmFtZSBpcyBk
ZXN0cm95ZWQsCisgICAgICAgIGluc3RlYWQgb2YgdXNpbmcgd2lsbERlc3Ryb3lGcmFtZSBjYWxs
YmFjayBvZiBXS0J1bmRsZVBhZ2VMb2FkZXJDbGllbnQKKyAgICAgICAgdGhhdCBoYXMgbmV2ZXIg
d29ya2VkLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL1dl
YktpdEZyYW1lLmNwcDoKKyAgICAgICAgKHdlYmtpdEZyYW1lR2V0V2ViRnJhbWUpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9XZWJLaXRGcmFtZVByaXZhdGUu
aDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvV2ViS2l0V2Vi
UGFnZS5jcHA6CisgICAgICAgICh3ZWJraXRGcmFtZUdldE9yQ3JlYXRlKToKKyAgICAgICAgKHdl
YmtpdEZyYW1lRGVzdHJveSk6CisgICAgICAgICh3ZWJraXRXZWJQYWdlQ3JlYXRlKToKKyAgICAg
ICAgKHdpbGxEZXN0cm95RnJhbWUpOiBEZWxldGVkLgorCiAyMDE1LTAyLTE0ICBBbGV4ZXkgUHJv
c2t1cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWxkIGZpeCBhZnRlciA8aHR0
cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTgwMTIyPgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL1dlYktpdEZyYW1lLmNw
cCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9XZWJL
aXRGcmFtZS5jcHAKaW5kZXggNzQ3NWJmYi4uZDdiMWJkZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL1dlYktpdEZyYW1lLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvV2Vi
S2l0RnJhbWUuY3BwCkBAIC00Nyw2ICs0NywxMSBAQCBXZWJLaXRGcmFtZSogd2Via2l0RnJhbWVD
cmVhdGUoV2ViRnJhbWUqIHdlYkZyYW1lKQogICAgIHJldHVybiBmcmFtZTsKIH0KIAorV2ViRnJh
bWUqIHdlYmtpdEZyYW1lR2V0V2ViRnJhbWUoV2ViS2l0RnJhbWUqIGZyYW1lKQoreworICAgIHJl
dHVybiBmcmFtZS0+cHJpdi0+d2ViRnJhbWUuZ2V0KCk7Cit9CisKIC8qKgogICogd2Via2l0X2Zy
YW1lX2lzX21haW5fZnJhbWU6CiAgKiBAZnJhbWU6IGEgI1dlYktpdEZyYW1lCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9ndGsvV2ViS2l0
RnJhbWVQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9ndGsvV2ViS2l0RnJhbWVQcml2YXRlLmgKaW5kZXggM2M3ZmFiNC4uODFiYzhhYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3Rr
L1dlYktpdEZyYW1lUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2d0ay9XZWJLaXRGcmFtZVByaXZhdGUuaApAQCAtMjQsNSArMjQsNiBA
QAogI2luY2x1ZGUgIldlYktpdEZyYW1lLmgiCiAKIFdlYktpdEZyYW1lKiB3ZWJraXRGcmFtZUNy
ZWF0ZShXZWJLaXQ6OldlYkZyYW1lKik7CitXZWJLaXQ6OldlYkZyYW1lKiB3ZWJraXRGcmFtZUdl
dFdlYkZyYW1lKFdlYktpdEZyYW1lKik7CiAKICNlbmRpZiAvLyBXZWJLaXRGcmFtZVByaXZhdGVf
aApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZ3RrL1dlYktpdFdlYlBhZ2UuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9BUEkvZ3RrL1dlYktpdFdlYlBhZ2UuY3BwCmluZGV4IDBhZTkxM2IuLmU0NTRm
MzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2d0ay9XZWJLaXRXZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9ndGsvV2ViS2l0V2ViUGFnZS5jcHAKQEAgLTQyLDYgKzQyLDcg
QEAKICNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Eb2N1
bWVudExvYWRlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWUuaD4KKyNpbmNsdWRlIDxXZWJD
b3JlL0ZyYW1lRGVzdHJ1Y3Rpb25PYnNlcnZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRnJhbWVW
aWV3Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9NYWluRnJhbWUuaD4KICNpbmNsdWRlIDxnbGliL2dp
MThuLWxpYi5oPgpAQCAtNzUsNyArNzYsMjkgQEAgc3RhdGljIGd1aW50IHNpZ25hbHNbTEFTVF9T
SUdOQUxdID0geyAwLCB9OwogCiBXRUJLSVRfREVGSU5FX1RZUEUoV2ViS2l0V2ViUGFnZSwgd2Vi
a2l0X3dlYl9wYWdlLCBHX1RZUEVfT0JKRUNUKQogCi10eXBlZGVmIEhhc2hNYXA8V2ViRnJhbWUq
LCBHUmVmUHRyPFdlYktpdEZyYW1lPj4gV2ViRnJhbWVNYXA7CitzdGF0aWMgdm9pZCB3ZWJraXRG
cmFtZURlc3Ryb3koV2ViRnJhbWUqKTsKKworY2xhc3MgV2ViS2l0RnJhbWVXcmFwcGVyIGZpbmFs
OiBwdWJsaWMgRnJhbWVEZXN0cnVjdGlvbk9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICBXZWJLaXRG
cmFtZVdyYXBwZXIoV2ViRnJhbWUmIHdlYkZyYW1lKQorICAgICAgICA6IEZyYW1lRGVzdHJ1Y3Rp
b25PYnNlcnZlcih3ZWJGcmFtZS5jb3JlRnJhbWUoKSkKKyAgICAgICAgLCBtX3dlYmtpdEZyYW1l
KGFkb3B0R1JlZih3ZWJraXRGcmFtZUNyZWF0ZSgmd2ViRnJhbWUpKSkKKyAgICB7CisgICAgfQor
CisgICAgV2ViS2l0RnJhbWUqIHdlYmtpdEZyYW1lKCkgY29uc3QgeyByZXR1cm4gbV93ZWJraXRG
cmFtZS5nZXQoKTsgfQorCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBmcmFtZURlc3Ryb3ll
ZCgpIG92ZXJyaWRlCisgICAgeworICAgICAgICBGcmFtZURlc3RydWN0aW9uT2JzZXJ2ZXI6OmZy
YW1lRGVzdHJveWVkKCk7CisgICAgICAgIHdlYmtpdEZyYW1lRGVzdHJveSh3ZWJraXRGcmFtZUdl
dFdlYkZyYW1lKG1fd2Via2l0RnJhbWUuZ2V0KCkpKTsKKyAgICB9CisKKyAgICBHUmVmUHRyPFdl
YktpdEZyYW1lPiBtX3dlYmtpdEZyYW1lOworfTsKKwordHlwZWRlZiBIYXNoTWFwPFdlYkZyYW1l
Kiwgc3RkOjp1bmlxdWVfcHRyPFdlYktpdEZyYW1lV3JhcHBlcj4+IFdlYkZyYW1lTWFwOwogCiBz
dGF0aWMgV2ViRnJhbWVNYXAmIHdlYkZyYW1lTWFwKCkKIHsKQEAgLTg1LDE0ICsxMDgsMTkgQEAg
c3RhdGljIFdlYkZyYW1lTWFwJiB3ZWJGcmFtZU1hcCgpCiAKIHN0YXRpYyBXZWJLaXRGcmFtZSog
d2Via2l0RnJhbWVHZXRPckNyZWF0ZShXZWJGcmFtZSogd2ViRnJhbWUpCiB7Ci0gICAgR1JlZlB0
cjxXZWJLaXRGcmFtZT4gZnJhbWUgPSB3ZWJGcmFtZU1hcCgpLmdldCh3ZWJGcmFtZSk7Ci0gICAg
aWYgKGZyYW1lKQotICAgICAgICByZXR1cm4gZnJhbWUuZ2V0KCk7Ci0KLSAgICBmcmFtZSA9IGFk
b3B0R1JlZih3ZWJraXRGcmFtZUNyZWF0ZSh3ZWJGcmFtZSkpOwotICAgIHdlYkZyYW1lTWFwKCku
c2V0KHdlYkZyYW1lLCBmcmFtZSk7CisgICAgYXV0byB3cmFwcGVyUHRyID0gd2ViRnJhbWVNYXAo
KS5nZXQod2ViRnJhbWUpOworICAgIGlmICh3cmFwcGVyUHRyKQorICAgICAgICByZXR1cm4gd3Jh
cHBlclB0ci0+d2Via2l0RnJhbWUoKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxXZWJLaXRGcmFt
ZVdyYXBwZXI+IHdyYXBwZXIgPSBzdGQ6Om1ha2VfdW5pcXVlPFdlYktpdEZyYW1lV3JhcHBlcj4o
KndlYkZyYW1lKTsKKyAgICB3cmFwcGVyUHRyID0gd3JhcHBlci5nZXQoKTsKKyAgICB3ZWJGcmFt
ZU1hcCgpLnNldCh3ZWJGcmFtZSwgV1RGOjptb3ZlKHdyYXBwZXIpKTsKKyAgICByZXR1cm4gd3Jh
cHBlclB0ci0+d2Via2l0RnJhbWUoKTsKK30KIAotICAgIHJldHVybiBmcmFtZS5nZXQoKTsKK3N0
YXRpYyB2b2lkIHdlYmtpdEZyYW1lRGVzdHJveShXZWJGcmFtZSogd2ViRnJhbWUpCit7CisgICAg
d2ViRnJhbWVNYXAoKS5yZW1vdmUod2ViRnJhbWUpOwogfQogCiBzdGF0aWMgQ1N0cmluZyBnZXRQ
cm92aXNpb25hbFVSTEZvckZyYW1lKFdlYkZyYW1lKiB3ZWJGcmFtZSkKQEAgLTE0NSwxMSArMTcz
LDYgQEAgc3RhdGljIHZvaWQgZGlkRmluaXNoRG9jdW1lbnRMb2FkRm9yRnJhbWUoV0tCdW5kbGVQ
YWdlUmVmLCBXS0J1bmRsZUZyYW1lUmVmIGZyYW0KICAgICBnX3NpZ25hbF9lbWl0KFdFQktJVF9X
RUJfUEFHRShjbGllbnRJbmZvKSwgc2lnbmFsc1tET0NVTUVOVF9MT0FERURdLCAwKTsKIH0KIAot
c3RhdGljIHZvaWQgd2lsbERlc3Ryb3lGcmFtZShXS0J1bmRsZVBhZ2VSZWYsIFdLQnVuZGxlRnJh
bWVSZWYgZnJhbWUsIGNvbnN0IHZvaWQqIC8qIGNsaWVudEluZm8gKi8pCi17Ci0gICAgd2ViRnJh
bWVNYXAoKS5yZW1vdmUodG9JbXBsKGZyYW1lKSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGRpZENsZWFy
V2luZG93T2JqZWN0Rm9yRnJhbWUoV0tCdW5kbGVQYWdlUmVmLCBXS0J1bmRsZUZyYW1lUmVmIGZy
YW1lLCBXS0J1bmRsZVNjcmlwdFdvcmxkUmVmIHdrV29ybGQsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pCiB7CiAgICAgaWYgKFdlYktpdFNjcmlwdFdvcmxkKiB3b3JsZCA9IHdlYmtpdFNjcmlwdFdv
cmxkR2V0KHRvSW1wbCh3a1dvcmxkKSkpCkBAIC0zOTIsNyArNDE1LDcgQEAgV2ViS2l0V2ViUGFn
ZSogd2Via2l0V2ViUGFnZUNyZWF0ZShXZWJQYWdlKiB3ZWJQYWdlKQogICAgICAgICAwLCAvLyBk
aWRSZWNlaXZlVGl0bGVGb3JGcmFtZQogICAgICAgICAwLCAvLyBkaWRGaXJzdExheW91dEZvckZy
YW1lCiAgICAgICAgIDAsIC8vIGRpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dEZvckZyYW1l
Ci0gICAgICAgIDAsIC8vIGRpZFJlbW92ZUZyYW1lRnJvbUhpZXJhcmNoeQorICAgICAgICAwLCAv
LyBkaWRSZW1vdmVGcmFtZUZyb21IaWVyYXJjaHksCiAgICAgICAgIDAsIC8vIGRpZERpc3BsYXlJ
bnNlY3VyZUNvbnRlbnRGb3JGcmFtZQogICAgICAgICAwLCAvLyBkaWRSdW5JbnNlY3VyZUNvbnRl
bnRGb3JGcmFtZQogICAgICAgICBkaWRDbGVhcldpbmRvd09iamVjdEZvckZyYW1lLApAQCAtNDE1
LDcgKzQzOCw3IEBAIFdlYktpdFdlYlBhZ2UqIHdlYmtpdFdlYlBhZ2VDcmVhdGUoV2ViUGFnZSog
d2ViUGFnZSkKICAgICAgICAgMCwgLy8gZmVhdHVyZXNVc2VkSW5QYWdlCiAgICAgICAgIDAsIC8v
IHdpbGxMb2FkVVJMUmVxdWVzdAogICAgICAgICAwLCAvLyB3aWxsTG9hZERhdGFSZXF1ZXN0Ci0g
ICAgICAgIHdpbGxEZXN0cm95RnJhbWUKKyAgICAgICAgMCwgLy8gd2lsbERlc3Ryb3lGcmFtZQog
ICAgIH07CiAgICAgV0tCdW5kbGVQYWdlU2V0UGFnZUxvYWRlckNsaWVudCh0b0FQSSh3ZWJQYWdl
KSwgJmxvYWRlckNsaWVudC5iYXNlKTsKIApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIv
VG9vbHMvQ2hhbmdlTG9nCmluZGV4IDA0Zjc4NzkuLjE2YjhkYjggMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAxNS0w
Mi0xNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAg
ICAgW0dUS10gV2ViS2l0RnJhbWUgb2JqZWN0cyBhcmUgbmV2ZXIgcmVsZWFzZWQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTY0MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBhIHdheSB0byBjaGVj
ayBHT2JqZWN0cyBsZWFrcyBmb3IgV2ViUHJvY2VzcyB0ZXN0cyBhbmQgY2hlY2sKKyAgICAgICAg
V2ViS2l0RnJhbWUgb2JqZWN0cyBhcmUgbm90IGxlYWtlZC4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9GcmFtZVRlc3QuY3BwOgorICAgICAgICAoV2ViS2l0RnJh
bWVUZXN0Ojp0ZXN0TWFpbkZyYW1lKToKKyAgICAgICAgKFdlYktpdEZyYW1lVGVzdDo6dGVzdFVS
SSk6CisgICAgICAgIChXZWJLaXRGcmFtZVRlc3Q6OnRlc3RKYXZhU2NyaXB0Q29udGV4dCk6Cisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0LmNw
cDoKKyAgICAgICAgKFdlYlByb2Nlc3NUZXN0Ojphc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVz
dEZpbmlzaGVzKToKKyAgICAgICAgKHJ1blRlc3QpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVzdC5oOgorCiAyMDE1LTAyLTE1ICBEYXZpZCBL
aWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjE4MDA4
Mik6IFdlYkNvcmUgRGVidWcgYnVpbGRzIGZhaWwgb24gTWF2ZXJpY2tzIGR1ZSB0byB3ZWFrIGV4
cG9ydCBzeW1ib2xzCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvRnJhbWVUZXN0LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9GcmFtZVRlc3QuY3BwCmluZGV4IGI5Yzg2MzYuLmEzMmQzZTUgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9GcmFtZVRlc3QuY3BwCisrKyBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9GcmFtZVRlc3QuY3BwCkBAIC0zMiw2ICsz
Miw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3ZWJr
aXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSk7CiAgICAgICAgIGdfYXNzZXJ0KFdFQktJ
VF9JU19GUkFNRShmcmFtZSkpOworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVz
dEZpbmlzaGVzKEdfT0JKRUNUKGZyYW1lKSk7CiAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9mcmFt
ZV9pc19tYWluX2ZyYW1lKGZyYW1lKSk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00MSw2
ICs0Miw3IEBAIHByaXZhdGU6CiAgICAgewogICAgICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3
ZWJraXRfd2ViX3BhZ2VfZ2V0X21haW5fZnJhbWUocGFnZSk7CiAgICAgICAgIGdfYXNzZXJ0KFdF
QktJVF9JU19GUkFNRShmcmFtZSkpOworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVu
VGVzdEZpbmlzaGVzKEdfT0JKRUNUKGZyYW1lKSk7CiAgICAgICAgIGdfYXNzZXJ0X2NtcHN0cih3
ZWJraXRfd2ViX3BhZ2VfZ2V0X3VyaShwYWdlKSwgPT0sIHdlYmtpdF9mcmFtZV9nZXRfdXJpKGZy
YW1lKSk7CiAKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01MCw2ICs1Miw3IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBXZWJLaXRGcmFtZSogZnJhbWUgPSB3ZWJraXRfd2ViX3BhZ2VfZ2V0
X21haW5fZnJhbWUocGFnZSk7CiAgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9JU19GUkFNRShmcmFt
ZSkpOworICAgICAgICBhc3NlcnRPYmplY3RJc0RlbGV0ZWRXaGVuVGVzdEZpbmlzaGVzKEdfT0JK
RUNUKGZyYW1lKSk7CiAgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9mcmFtZV9nZXRfamF2YXNjcmlw
dF9nbG9iYWxfY29udGV4dChmcmFtZSkpOwogCiAgICAgICAgIHJldHVybiB0cnVlOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0
LmNwcCBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9XZWJQcm9jZXNzVGVz
dC5jcHAKaW5kZXggYzY2MjFjMi4uNjQzYjU0OSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL1dlYlByb2Nlc3NUZXN0LmNwcAorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rlc3QuY3BwCkBAIC0yMiw5ICsy
MiwxMiBAQAogCiAjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaD4KICNpbmNs
dWRlIDxnaW8vZ2lvLmg+CisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYv
TmV2ZXJEZXN0cm95ZWQuaD4KICNpbmNsdWRlIDx3dGYvZ29iamVjdC9HVW5pcXVlUHRyLmg+CiAK
K3N0YXRpYyBIYXNoU2V0PEdPYmplY3QqPiBzX3dhdGNoZWRPYmplY3RzOworCiB0eXBlZGVmIEhh
c2hNYXA8U3RyaW5nLCBzdGQ6OmZ1bmN0aW9uPHN0ZDo6dW5pcXVlX3B0cjxXZWJQcm9jZXNzVGVz
dD4gKCk+PiBUZXN0c01hcDsKIHN0YXRpYyBUZXN0c01hcCYgdGVzdHNNYXAoKQogewpAQCAtMzcs
NiArNDAsMTQgQEAgdm9pZCBXZWJQcm9jZXNzVGVzdDo6YWRkKGNvbnN0IFN0cmluZyYgdGVzdE5h
bWUsIHN0ZDo6ZnVuY3Rpb248c3RkOjp1bmlxdWVfcHRyPFcKICAgICB0ZXN0c01hcCgpLmFkZCh0
ZXN0TmFtZSwgV1RGOjptb3ZlKGNsb3N1cmUpKTsKIH0KIAordm9pZCBXZWJQcm9jZXNzVGVzdDo6
YXNzZXJ0T2JqZWN0SXNEZWxldGVkV2hlblRlc3RGaW5pc2hlcyhHT2JqZWN0KiBvYmplY3QpCit7
CisgICAgc193YXRjaGVkT2JqZWN0cy5hZGQob2JqZWN0KTsKKyAgICBnX29iamVjdF93ZWFrX3Jl
ZihvYmplY3QsIFtdKGdwb2ludGVyLCBHT2JqZWN0KiBmaW5hbGl6ZWRPYmplY3QpIHsKKyAgICAg
ICAgc193YXRjaGVkT2JqZWN0cy5yZW1vdmUoZmluYWxpemVkT2JqZWN0KTsKKyAgICB9LCBudWxs
cHRyKTsKK30KKwogc3RkOjp1bmlxdWVfcHRyPFdlYlByb2Nlc3NUZXN0PiBXZWJQcm9jZXNzVGVz
dDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgdGVzdE5hbWUpCiB7CiAgICAgZ19hc3NlcnQodGVzdHNN
YXAoKS5jb250YWlucyh0ZXN0TmFtZSkpOwpAQCAtNTMsNiArNjQsNyBAQCBzdGF0aWMgSlNWYWx1
ZVJlZiBydW5UZXN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBmdW5jdGlvbiwg
SlNPYmplY3RSZQogCiAgICAgV2ViS2l0V2ViUGFnZSogd2ViUGFnZSA9IFdFQktJVF9XRUJfUEFH
RShKU09iamVjdEdldFByaXZhdGUodGhpc09iamVjdCkpOwogICAgIGdfYXNzZXJ0KFdFQktJVF9J
U19XRUJfUEFHRSh3ZWJQYWdlKSk7CisgICAgV2ViUHJvY2Vzc1Rlc3Q6OmFzc2VydE9iamVjdElz
RGVsZXRlZFdoZW5UZXN0RmluaXNoZXMoR19PQkpFQ1Qod2ViUGFnZSkpOwogCiAgICAgc3RkOjp1
bmlxdWVfcHRyPFdlYlByb2Nlc3NUZXN0PiB0ZXN0ID0gV2ViUHJvY2Vzc1Rlc3Q6OmNyZWF0ZShT
dHJpbmc6OmZyb21VVEY4KHRlc3RQYXRoLmdldCgpKSk7CiAgICAgcmV0dXJuIEpTVmFsdWVNYWtl
Qm9vbGVhbihjb250ZXh0LCB0ZXN0LT5ydW5UZXN0KGdfc3RycnN0cih0ZXN0UGF0aC5nZXQoKSwg
Ii8iKSArIDEsIHdlYlBhZ2UpKTsKQEAgLTY3LDYgKzc5LDE2IEBAIHN0YXRpYyBjb25zdCBKU1N0
YXRpY0Z1bmN0aW9uIHdlYlByb2Nlc3NUZXN0UnVubmVyU3RhdGljRnVuY3Rpb25zW10gPQogc3Rh
dGljIHZvaWQgd2ViUHJvY2Vzc1Rlc3RSdW5uZXJGaW5hbGl6ZShKU09iamVjdFJlZiBvYmplY3Qp
CiB7CiAgICAgZ19vYmplY3RfdW5yZWYoSlNPYmplY3RHZXRQcml2YXRlKG9iamVjdCkpOworCisg
ICAgaWYgKHNfd2F0Y2hlZE9iamVjdHMuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBnX3ByaW50KCJMZWFrZWQgb2JqZWN0cyBpbiBXZWJQcm9jZXNzOiIpOworICAgIGZvciAoY29u
c3QgYXV0byBvYmplY3QgOiBzX3dhdGNoZWRPYmplY3RzKQorICAgICAgICBnX3ByaW50KCIgJXMo
JXApIiwgZ190eXBlX25hbWVfZnJvbV9pbnN0YW5jZShyZWludGVycHJldF9jYXN0PEdUeXBlSW5z
dGFuY2UqPihvYmplY3QpKSwgb2JqZWN0KTsKKyAgICBnX3ByaW50KCJcbiIpOworCisgICAgZ19h
c3NlcnQoc193YXRjaGVkT2JqZWN0cy5pc0VtcHR5KCkpOwogfQogCiBzdGF0aWMgdm9pZCB3aW5k
b3dPYmplY3RDbGVhcmVkQ2FsbGJhY2soV2ViS2l0U2NyaXB0V29ybGQqIHdvcmxkLCBXZWJLaXRX
ZWJQYWdlKiB3ZWJQYWdlLCBXZWJLaXRGcmFtZSogZnJhbWUsIFdlYktpdFdlYkV4dGVuc2lvbiog
ZXh0ZW5zaW9uKQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQy
R3RrL1dlYlByb2Nlc3NUZXN0LmggYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvV2ViUHJvY2Vzc1Rlc3QuaAppbmRleCBmYjRkZDVkLi5lNzJlZWQ5IDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rlc3QuaAorKysg
Yi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvV2ViUHJvY2Vzc1Rlc3QuaApA
QCAtMjgsNiArMjgsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+V2ViUHJvY2Vzc1Rlc3QoKSB7
IH0KICAgICB2aXJ0dWFsIGJvb2wgcnVuVGVzdChjb25zdCBjaGFyKiB0ZXN0TmFtZSwgV2ViS2l0
V2ViUGFnZSopID0gMDsKIAorICAgIHN0YXRpYyB2b2lkIGFzc2VydE9iamVjdElzRGVsZXRlZFdo
ZW5UZXN0RmluaXNoZXMoR09iamVjdCopOworCiAgICAgc3RhdGljIHZvaWQgYWRkKGNvbnN0IFN0
cmluZyYgdGVzdE5hbWUsIHN0ZDo6ZnVuY3Rpb248c3RkOjp1bmlxdWVfcHRyPFdlYlByb2Nlc3NU
ZXN0PiAoKT4pOwogICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8V2ViUHJvY2Vzc1Rlc3Q+IGNy
ZWF0ZShjb25zdCBTdHJpbmcmIHRlc3ROYW1lKTsKIH07Cg==
</data>
<flag name="review"
          id="271581"
          type_id="1"
          status="+"
          setter="mrobinson"
    />
          </attachment>
      

    </bug>

</bugzilla>